是否可以创建具有灵活参数列表的模板方法,如下所示:
class TestA
{
public:
TestA(int i, int j) { ... }
}
class TestB
{
public:
TestB(std::string a) { ... }
}
class Base
{
public:
template<class T>
bool add( ... )
{
... new T( **PARA** );
}
}
用参数列表代替PARA。类 TestA 和 TestB 知道它们需要哪个参数(多少参数和类型),所以可以使用 va_args?
有更好的方法吗?
base.add<TestA>(1,2);
base.add<TestB>( "abc" );
最佳答案
是的,您正在寻找variadric templates .他们会让您拥有您想要的功能:
template<class T, class... Args>
bool Base::add(Args&&... args) {
// ...
T myT(std::forward<Args>(args)...);
// ...
}
请注意,即使您的参数都不是右值引用,您仍然应该同时使用 Args&&
和 std::forward
(除非您明确想要强制复制,当然)。这些将根据需要折叠成适当的引用类型。
关于c++ - 具有专门参数的类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29108718/