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)
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)
| 归档时间: |
|
| 查看次数: |
7209 次 |
| 最近记录: |