我想使用指向类成员的指针作为模板参数,如下所示:
template <class Class, class Result, Result Class::*Member>
struct MyStruct {
// ...
};
Run Code Online (Sandbox Code Playgroud)
使用这个结构MyStruct<SomeClass, SomeResult, &SomeClass::value> variable就好了,但我不喜欢我必须指定SomeClass和SomeResult.
我想使用,MyStruct<&SomeClass::value> variable如果这是可能的,但不会失去传递任何类和任何结果类型的能力.
我尝试了以下方法,但语法是非法的:
template <class Class, class Result>
template <Result Class::*Member>
struct MyStruct {
// ...
};
Run Code Online (Sandbox Code Playgroud)
错误:模板参数列表太多
我尝试使用辅助函数(实际上在Clang中工作但被GCC拒绝):
template <class Class, class Result>
static constexpr auto makeMyStruct(Result Class::*member) ->
MyStruct<Class, Result, member> {
// ...
}
Run Code Online (Sandbox Code Playgroud)
错误:在函数体外使用参数`member'
错误:模板参数3无效
有可能有一个简单的MyStruct<&SomeClass::value>,如果是这样,怎么样?
相关问题没有解决我的问题:
我有一个嵌套的结构,我想有一个嵌入成员之一的指向成员的指针:
这合法吗?
struct InnerStruct
{
bool c;
};
struct MyStruct {
bool t;
bool b;
InnerStruct inner;
};
Run Code Online (Sandbox Code Playgroud)
这个:
MyStruct mystruct;
//...
bool MyStruct::* toto = &MyStruct::b;
Run Code Online (Sandbox Code Playgroud)
没问题,但是:
bool MyStruct::* toto = &MyStruct::inner.c;
Run Code Online (Sandbox Code Playgroud)
不是.任何的想法?
谢谢
这里有一些细节是的,它是&MyStruct :: b而不是mystruct :: b; 代码来自自定义RTTI/Property系统.对于每个指定的类,我们保留一个"Property"数组,包括一个Ptr-to-member它的用法如下:
//somewhere else in code...
( myBaseClassWithCustomRTTIPointer)->* toto = true;
Run Code Online (Sandbox Code Playgroud)