c ++调用模板类的特定模板构造函数

cos*_*sor 5 c++ templates constructor

如果类也是模板,是否可以使用模板参数调用构造函数?

#include <stdio.h>
#include <iostream>

template <class A>
struct Class
{
  template <class B>
  Class(B arg) { std::cout << arg << std::endl; }
};

int main()
{
  Class<int> c<float>(1.0f);
  Class<int>* ptr = new Class<int><float>(2.0f);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

编辑:所以我想调用特定模板构造函数的唯一方法是使用casted paramterers调用它到你想要的模板类型:

#include <stdio.h>
#include <iostream>

template <class A>
struct Class
{
  template <class B>
  Class(B arg) { std::cout << arg << std::endl; }

  Class(double arg) { std::cout << "double" << std::endl; }
  Class(float arg) { std::cout << "float" << std::endl; }
};

int main()
{
  Class<int> c(1.0f);
  Class<int>* ptr = new Class<int>((double)2.0f);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

//这个输出:float double

edit2:但是构造函数参数本身不属于构造函数模板参数会发生什么?

template <class B, class C>
Class(B arg) { /* how do you specify ?? C */ }
Run Code Online (Sandbox Code Playgroud)

Joh*_*itb 2

edit2:但是不属于构造函数参数本身的构造函数模板参数会发生什么情况?

然后你可以传入一个已编码的参数

template<typename T> struct encodeType { };

struct A {
  template<typename T, typename U>
  A(T t, encodeType<U>) { }
};

A a(1, encodeType<float>());
Run Code Online (Sandbox Code Playgroud)