我想用一个指针指向一个类成员作为模板参数为:指针类成员作为模板参数
template <class Class, class Result, Result Class::*Member>
struct MyStruct {
// ...
};
使用这种结构就像MyStruct<SomeClass, SomeResult, &SomeClass::value> variable
作品不错,但我不喜欢我必须指定SomeClass
和SomeResult
。
如果可能,我想使用MyStruct<&SomeClass::value> variable
,但不会失去传递任何类并具有任何结果类型的能力。
我尝试以下,但语法是非法的:
template <class Class, class Result>
template <Result Class::*Member>
struct MyStruct {
// ...
};
error: too many template-parameter-lists
我使用一个辅助函数(即没有实际在Clang的工作,但是由GCC拒绝)尝试:
template <class Class, class Result>
static constexpr auto makeMyStruct(Result Class::*member) ->
MyStruct<Class, Result, member> {
// ...
}
error: use of parameter `member' outside function body
error: template argument 3 is invalid
是否可以有一个简单的MyStruct<&SomeClass::value>
,如果是这样,怎么样?
相关问题没有解决不了我的问题:
- Pointer to class member as template parameter
- C++0x error with constexpr and returning template function
Dup? http://stackoverflow.com/questions/5628121/is-it-possible-to-emulate-templateauto-x – GManNickG 2013-03-01 01:38:19
@GManNickG我不确定我的问题是否归结为其他问题。我的范围更窄,使用宏我不会太高兴。 – kay 2013-03-01 01:43:35
术语是*指向成员的*,而不是*引用*给成员。引用和指针在语言上有很大不同(好吧,不是*不同,但仍不相同) – 2013-03-01 04:55:30