我在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类中是不可见的。 有什么方法可以解决我的问题吗?