Abo*_*y13 2 c++ templates class-template c++11 template-argument-deduction
我正在尝试获取类的类型名称。当然,我可以只使用typename(class),但我需要将它放在这样的模板中
ClassA<typeid(class).name()> a = ClassA<typeid(class).name()>(args);
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的:
template<class T>
class A
{
public:
T t; // the class
A(T t1)
{
t = t1;
}
};
class B // example class
{
public:
int i;
B(int i1)
{
i = i1;
}
};
int main()
{
B b = B(1);
A<typeid(b).name()>(b) a = A<typeid(b).name()>(b); // my issue
}
Run Code Online (Sandbox Code Playgroud)
但它总是给我一个错误。
'A': invalid template argument for 'T', type expected.
Run Code Online (Sandbox Code Playgroud)
有没有办法解决这个问题(类A需要能够接受一个属性中的任何类)?
有没有办法解决这个问题(
class A需要能够接受一个属性中的任何类)?
你要找的就是关键词decltype。你需要
A<decltype(b)> a = A<decltype(b)>{ b };
// or just
auto a = A<decltype(b)>{ b };
Run Code Online (Sandbox Code Playgroud)
A a{ b }; // no need of "A<-template-para-list->"
Run Code Online (Sandbox Code Playgroud)
旁注:如果不初始化构造函数初始值设定项列表中的成员,则传入的T成员A必须是默认可构造的。因此,我会推荐
template<class T>
class A
{
T t;
public:
A(T t1)
: t{ t1 } // ---> initialize in constructor initializer list
{}
};
Run Code Online (Sandbox Code Playgroud)