1

给定一个接受字符串参数的属性,例如[[deprecated("reason")]],是否可以使用硬编码字符串文字以外的任何其他内容?

就我而言,我正在为 EOS.IO 区块链开发一个智能合约,该合约公开了该[[eosio::on_notify("account::action")]]属性,并且我想"account::action"在配置文件中提取该部分。

我知道有一个 EOS.IO 特定的 Stack Exchange 网络,但我认为这个问题适用于所有 C++11 属性。

迄今为止的尝试

config.hpp我尝试将这些参数定义为标题中命名空间中的静态 const 字符串:

// ...omitting irrelevant parts

namespace config {
    static const std::string test = "eosio.token::transfer";
}

然后导入标头并使用静态字符串:

// contract.cpp

// ...omitting irrelevant parts

#include "config.hpp"

class [[eosio::contract]] myapp : public contract {
public:

    [[eosio::on_notify(config::test)]]
    void on_transfer();
};

但是,编译器抱怨:

错误:'on_notify' 属性需要一个字符串 [[eosio::on_notify(config::test)]]

4

1 回答 1

5

不。

从字面上看,属性被嵌入到您的源代码中。

不过,您可以使用预处理器,在构建系统的帮助下定义所需的宏。

于 2019-08-14T13:57:35.753 回答