在可变参数模板参数列表中传递 const char* 会导致链接器错误
Passing const char* in variadic template argument list results in linker errors
我有以下模板 class 异常构造函数 class:
MyCustomException.h:
template<typename ... Args>
MyCustomException(const Message& msg, const char* fileName, int line, Args&& ... args);
MyCustomException.cpp:
template<typename ... Args>
MyCustomException(const Message& msg, const char* fileName, int line, Args&& ... args) {
// random magic here
}
现在,当我尝试将 const char*
传递给它时(例如 main.cpp
):
#include "MyCustomException.h"
// ...
void myFunc() {
try {
// ...
const Message m { id, msg };
const char* mychar { "test string" };
if (someCondition) {
throw MyCustomException(m, __FILE__, __LINE__, mychar);
}
catch (MyCustomException& e) {
// ...
}
}
// ...
int main() {
myFunc();
}
我不断收到链接器错误 LNK2019(未解析的外部符号):
public: __cdecl MyCustomException::MyCustomException<char const *>(class Message const &,char const *,int,char const *)
向其传递字符串文字时,一切正常。
可变模板参数和 const char*
有什么关系?
问题在于在单独的 .cpp 文件中定义模板构造函数。
如G.M。链接到评论中的 this post,模板成员应在头文件中实现,或者在 .cpp 文件中定义时,至少为每个实例明确定义。
我有以下模板 class 异常构造函数 class:
MyCustomException.h:
template<typename ... Args>
MyCustomException(const Message& msg, const char* fileName, int line, Args&& ... args);
MyCustomException.cpp:
template<typename ... Args>
MyCustomException(const Message& msg, const char* fileName, int line, Args&& ... args) {
// random magic here
}
现在,当我尝试将 const char*
传递给它时(例如 main.cpp
):
#include "MyCustomException.h"
// ...
void myFunc() {
try {
// ...
const Message m { id, msg };
const char* mychar { "test string" };
if (someCondition) {
throw MyCustomException(m, __FILE__, __LINE__, mychar);
}
catch (MyCustomException& e) {
// ...
}
}
// ...
int main() {
myFunc();
}
我不断收到链接器错误 LNK2019(未解析的外部符号):
public: __cdecl MyCustomException::MyCustomException<char const *>(class Message const &,char const *,int,char const *)
向其传递字符串文字时,一切正常。
可变模板参数和 const char*
有什么关系?
问题在于在单独的 .cpp 文件中定义模板构造函数。 如G.M。链接到评论中的 this post,模板成员应在头文件中实现,或者在 .cpp 文件中定义时,至少为每个实例明确定义。