变量模板调用子类

时间:2015-02-22 17:22:17

标签: c++ templates variadic-templates

我在C ++中使用可变参数模板: 我想从类B中调用类A中实现的可变参数模板函数,该函数继承自A:

a.hpp

class A{
protected:
    template<typename... Ts>
    void variadic(Ts... args); 
};

a.cpp

#include "a.hpp"
template<typename... Ts>
void A::variadic(Ts... args) {/*something*/}

b.hpp

#include "a.hpp"
class B : public A {
public:
     void func() {
         variadic(4, 3.4, "hello");
     }
};

当我调用该方法时(例如B testobj;testobj.func();),我总是会收到以下链接器错误:

$ clang++ -std=c++11 main.cpp a.cpp -o main
/tmp/main-2e3fd9.o: In function `B::func()':
main.cpp:(.text._ZN1B4funcEv[_ZN1B4funcEv]+0x29): undefined reference to    `void A::variadic<int, double, char const*>(int, double, char const*)'
clang: error: linker command failed with exit code 1 (use -v to see invocation)

如果我直接在头文件中实现可变方法,我不会收到任何错误。如果我将func放在A类中,它也会毫无错误地编译。

在我看来,可变参数模板在B类中是不可见的。 有什么方法可以解决我的问题吗?

0 个答案:

没有答案