给定一个接受字符串参数的属性,例如[[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)]]