基于其他我的问题 https://stackoverflow.com/questions/1913541/how-to-save-pointer-to-member-in-compile-time.
考虑下面的代码
template<typename T, int N>
struct A {
typedef T value_type; // save T to value_type
static const int size = N; // save N to size
};
你看,我可以用value_type
and size
作为模板参数。
typedef A<int, 2> A1;
typedef A<A1::value_type, A1::size + 3> A2; // OK, A2 is A<int,5>
现在我想对指向成员的指针执行相同的操作:
struct Foo {
int m;
int r;
};
template<int Foo::*Mem>
struct B {
static int Foo::* const mp;
};
template<int Foo::*Mem>
int Foo::* const B<Mem>::mp = Mem; // Save pointer to member
但我收到错误。
typedef B<&Foo::m> B1;
typedef B<B1::mp> B2; // DOES NOT WORK
如何使最后一行工作?
或者如何得到类似的结果?
Note.我知道这是行不通的。不需要链接到 C++ 标准。
我需要解决方法。
根据 C++ 标准 5.19/2,它不应该工作:
其他表达式被视为常量表达式仅用于非局部静态对象初始化的目的(3.6.2)。此类常量表达式应计算为以下之一:
— 空指针值 (4.10),
— 空成员指针值 (4.11),
— 算术常量表达式,
— 地址常量表达式,
— 引用常量表达式,
— 完整对象类型的地址常量表达式,加上或减去整型常量表达式,
or
— 指向成员常量表达式的指针.
这不是原始问题的答案,但它是this https://stackoverflow.com/questions/1914342/is-there-pointer-to-member-traits-or-something-like-this/1916212#1916212错误的陈述。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)