【发布时间】:2011-04-07 22:10:55
【问题描述】:
使用模板化数字包装结构:
template <int I> struct Num { static const int n = I; };
还有一些重载函数:
template <typename T>
Num<0> id(T x) { return Num<0>(); }
Num<1> id(int x) { return Num<1>(); }
Num<2> id(double x) { return Num<2>(); }
Num<3> id(char x) { return Num<3>(); }
我可以使用decltype 和id 的返回参数类型来初始化Zod 结构的m_i 成员:
template <typename T>
struct Zod {
Zod(T x) { m_i = identity<decltype(id(x))>::type::n; }
int m_i;
};
但是,我真正想要的是 Zod 结构将第二个整数模板参数初始化为 m_i 设置的值。
template <typename T, int I = ?>
struct Zod { ... }
这似乎是可能的,因为identity/decltype 表达式的计算结果为编译时间常数;例如,这在全局范围内很好:
char c;
static const int g = identity<decltype(id(c))>::type::n;
问题是构造函数的x参数在Zod的模板声明范围内不可用。可以吗?
【问题讨论】:
-
我想制作
m_istatic const 不是一种选择?出于好奇,您想实现什么目标?
标签: c++ templates constructor