我有:
unarchive
接受字典和键并基于传递的模板类型 ( )的模板例程T
可以专门用于生成T
- a 的构造函数,用于
struct
构造unarchive
其成员
一个例子可能如下:
template <typename T>
T unarchive(const dictionary_t&, key_type key);
struct foo
{
foo(const dictionary& archive) :
value_m(unarchive<decltype(value_m)>(archive, value_key))
{ }
some_value_type value_m;
};
在这里使用的好处unarchive<decltype(value_m)>
是我可以改变类型而value_m
不用更新这行代码——类型总是跟随成员变量的类型。
我遇到的问题更美观:它非常冗长。目前我有一个宏:
#define UNARCHIVE_FOR(var) unarchive<decltype(var)>
而foo
的构造函数变化如下:
foo(const dictionary& archive) :
value_m(UNARCHIVE_FOR(value_m)(archive, value_key))
{ }
现在我有一个更简洁但更丑陋的结果。没有宏能达到同样的效果吗?我想要的是类似于:
foo(const dictionary& archive) :
value_m(unarchive<value_m>(archive, value_key))
{ }
如何才能做到这一点?