首页 > 解决方案 > 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并传递给相应的函数,以生成对象。在这种情况下,在构造函数执行完成后,使用的类型与类无关,所以我认为在整个类上使用模板没有意义。

标签: c++classtemplates

解决方案


我怀疑你已经ctor.cpp文件中定义了你的。您必须template在标题中定义您的。

// class.hpp

class Class
{
public:
     template<typename T>
     Class( T arg )
     {
         // Define the ctor body here.
     }
};

推荐阅读