wal*_*lly 4 c++ templates member-function-pointers
我希望我能做到这一点:
template <typename T x>
struct Test {
T val{x};
};
int main() {
Test<3> test;
return test.val;
}
Run Code Online (Sandbox Code Playgroud)
我在这里回答了一个问题,我使用以下模板:
template <typename T, typename V, typename VP, V(T::*getf)(), void (T::*setf)(VP)>
Run Code Online (Sandbox Code Playgroud)
每种类型都是手动指定的.但这是一个重复因为T
,V
并且VP
已经包含在指向成员函数getf
和setf
类型的指针中.
但是,如果我只尝试模板
template <V(T::*getf)(), void (T::*setf)(VP)>
Run Code Online (Sandbox Code Playgroud)
要么
template <V(T::*getf)(), void (T::*setf)(VP), typename T, typename V, typename VP>
Run Code Online (Sandbox Code Playgroud)
那么类型无法确定.
接下来我尝试了专业化:
template <typename T, typename T2>
struct Accessor;
template <typename V, typename T, typename VP>
struct Accessor <V(T::*)(), void (T::*)(VP)>
Run Code Online (Sandbox Code Playgroud)
如果使用,将确定所有类型
typedef Accessor<
decltype(&TargetClass::GetFoo),
decltype(&TargetClass::SetFoo)> fooAcessor;
Run Code Online (Sandbox Code Playgroud)
但现在我不再有指针,只有类型.
有没有办法编写模板,以便可以从非类型模板参数自动确定类型?
Bar*_*rry 12
有没有办法编写模板,以便可以从非类型模板参数自动确定类型?
在C++ 17中,是的,感谢声明非类型模板参数auto
:
template <auto x>
struct Test {
decltype(x) val{x};
};
Run Code Online (Sandbox Code Playgroud)
在C++ 17之前,没有.你必须写:
template <class T, T x>
struct Test {
T val{x};
};
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
255 次 |
最近记录: |