c++ - C++:为构造函数使用模板
问题描述
是否可以在构造函数上使用模板,例如:
class Class {
public:
template<typename T>
Class(T arg);
};
和 cpp 文件:
#include "class.h"
template<typename T>
Class::Class (T arg) {
// do something
}
构造函数被调用:
int a = 0;
Class c {a};
编译此代码时,我收到以下错误:
/usr/bin/ld: /tmp/ccNzp4z7.o: in function `main':
main.cpp:(.text+0x1c): undefined reference to `Class::Class<int>(int)'
collect2: error: ld returned 1 exit status
它的用途将是一个构造函数,如:
Class(std::unordered_set<T> choices, std::unordered_map<Direction, std::function<std::string(T)>> mapping);
其中每个对象choices
都将针对映射中的每个对象进行迭代Direction
并传递给相应的函数,以生成对象。在这种情况下,在构造函数执行完成后,使用的类型与类无关,所以我认为在整个类上使用模板没有意义。
解决方案
我怀疑你已经ctor
在.cpp
文件中定义了你的。您必须template
在标题中定义您的。
// class.hpp
class Class
{
public:
template<typename T>
Class( T arg )
{
// Define the ctor body here.
}
};
推荐阅读
- amazon-web-services - RDS 中的 CPU 积分余额
- ios - 违反 Core Data 的线程合约EXC_BREAKPOINT (code=1, subcode=0x1f0ad1c8c)
- tkinter - 为什么很多书籍和网站都说 Tk() 是一个方法,而 Tk 是一个类,而 Tk() 是一个构造函数?
- node.js - 关闭浏览器选项卡时如何调用nodejs注销api?
- vim - Pycharm vim插件可以支持调用功能吗?
- java - 关闭 Crawler4j 中 3 个工作爬虫的特定爬虫?
- cypress - 如何为特定视图(例如移动/平板电脑)执行赛普拉斯代码?
- laravel - 未知的自定义元素 laravel vue
- jquery - 无法将 .append() HTML 附加到现有元素
- python - Python - 从列表中的字符串元素中删除子字符串?