c++ - 可变模板成员函数头/源文件
问题描述
在 abc.h 文件中,我有一个类:
class ABC
{
public:
template <typename... Args>
ABC(Args... args);
protected:
template <typename Type, typename... Args>
void processArguments(Type &argument, Args... args);
template <typename Type>
void processArguments(Type &argument);
template <typename Type>
void doSomethingWithTheArgument(Type &argument);
};
然后,我使用以下内容创建了 abc.cpp:
template <typename... Args>
ABC::ABC(Args... args)
{
processArguments(args...);
}
template <typename Type, typename... Args>
void ABC::processArguments(Type &argument, Args... args)
{
doSomethingWithTheArgument(argument);
processArguments(args...);
}
template <typename Type>
void ABC::processArguments(Type &argument)
{
doSomething(argument);
}
template <typename Type>
void ABC::doSomethingWithTheArgument(Type &argument)
{
std::cout << argument << std::endl;
}
只是一些test.cpp:
int main()
{
ABC abc(1, 2, 3, "somehing", 2 + 5);
return 0;
}
然后我想用下面的命令行来构建它:
g++ --std=c++11 abc.cpp test.cpp
然后砰!
/tmp/ccflWDpf.o: In function `main':
test.cpp:(.text+0x3b): undefined reference to `ABC::ABC<int, int, int, char const*, int>(int, int, int, char const*, int)'
collect2: error: ld returned 1 exit status
当我将整个代码放在一个 xyz.cpp 文件中时,代码编译得很好。它是否说明不能在不同的翻译单元中提供可变参数模板的实现?
解决方案
推荐阅读
- django - 尝试在 Django 中编写只读 SQLite 数据库
- css - Laravel Mix 将所有 vue 组件 css 提取到单个 app.css
- c++ - std::stoul 不抛出 std::out_of_range
- esp8266 - 无法使用 nodemcu 在 16x2 显示器(I2C 板)上显示任何内容?
- python - 如何在 Python 中更改联系表的颜色饱和度?
- html - Bootstrap 4 标志在桌面上的位置中心
- c# - .net core 和 IIS 安装和配置的 Inno Setup
- scala - 我的 Maven 项目配置错误是什么?不选择依赖项或类结构
- javascript - ReactJS 中的基石工具 - 不处理第一个加载位之后工作
- javascript - 超链接并显示选项卡