我希望我能做到这一点:
templatestruct Test { T val{x}; }; int main() { Test<3> test; return test.val; }
但我不能.对?
我在这里回答了一个问题,我使用以下模板:
template
每种类型都是手动指定的.但这是一个重复因为T
,V
并且VP
已经包含在指向成员函数getf
和setf
类型的指针中.
但是,如果我只尝试模板
template
要么
template
那么类型无法确定.
接下来我尝试了专业化:
templatestruct Accessor; template struct Accessor
如果使用,将确定所有类型
typedef Accessor< decltype(&TargetClass::GetFoo), decltype(&TargetClass::SetFoo)> fooAcessor;
但现在我不再有指针,只有类型.
有没有办法编写模板,以便可以从非类型模板参数自动确定类型?
有没有办法编写模板,以便可以从非类型模板参数自动确定类型?
在C++ 17中,是的,感谢声明非类型模板参数auto
:
templatestruct Test { decltype(x) val{x}; };
在C++ 17之前,没有.你必须写:
templatestruct Test { T val{x}; };