c++ - 具有专门参数的类方法

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

最佳答案

是的,您正在寻找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/

相关文章:

c++ - async_write 方法错误

c++ - 什么时候将引用进行零初始化?

c++ - 匿名类的typedef

datetime - 处理亚秒精度 UTC 时间算术中的闰秒

c++ - 在OpenCV C++窗口上检测触摸

c++ - Boost 的 Sublime Text 2 问题

c++ - 没有 typedef 的函数指针

c++ - 我应该执行什么形式的测试?

c++ - 将特定位置的位收集成一个新值

c++ - 带参数的自由函数,获取返回类型