c++ - C++ 模板函数中根据类型名调用不同的构造函数

标签 c++ templates constructor type-traits

我有一个自定义的集合,名为 MySet ,一个整数应该传递给 MySet 的构造函数来构建它。我想写一个函数来初始化 std::vectorMySet 。 我希望这个函数也能够初始化 std::vectorstd::set <int> .

类似于:

template<typename S>
void init(std::vector<S> &v, int n){
    v.reserve(n);
    for(int i=0; i<n; i++){
        if(std::is_same<S, MySet>::value){
            v.push_back(S(42));
        }
        else{
            v.push_back(S());
        }
    }
    return;
}

不使用 init 上的函数重载是否可以解决这个问题? ?

最佳答案

为您的类型编写一个创建器函数:

template <class S>
S create()
{
  return S();
}

template <>
MySet create<MySet>()
{
  return MySet(42);
}


template<typename S>
void init(std::vector<S> &v, int n){
    v.reserve(n);
    for(int i=0; i<n; i++){
        v.push_back(create<S>());
    }
}

关于c++ - C++ 模板函数中根据类型名调用不同的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36176884/

相关文章:

c++ - 在同一类的构造函数中调用构造函数

c++ - Visual Studio 2010 是否支持 Unicode 中的 C++ 源代码和字符串文字中的 Unicode 字符

c++ - 编译器以获得更好的模板支持

c++ - 使用指针传递引用和值

c++ - 在运行时获取模板类型

c++ - 基于类模板的包装函数

delphi - 将参数传递给delphi TFrame

Java 构造函数列表作为字符串

c++ - ubuntu命令获取C++程序中的所有功能

c++ - std::time_get - 来自 std::cin 的输入正常;来自 std::istringstream 的输入给出错误