具有专用参数的类方法

时间:2015-03-16 06:10:39

标签: c++ c++11

可以使用灵活的参数列表创建模板方法,如下所示:

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" );

1 个答案:

答案 0 :(得分:7)

是的,您正在寻找variadric templates。它们将让您拥有您想要的功能:

template<class T, class... Args>
bool Base::add(Args&&... args) {
    // ...
    T myT(std::forward<Args>(args)...);
    // ... 
}

请注意,即使您的参数都不是右值引用,您仍然应该同时使用Args&&std::forward(当然,除非您明确要强制执行副本)。这些将根据需要折叠成适当的引用类型。