我再次陷入困境......
我有这个模板类:
template <typename a,typename b,typename c>
class myclass
{...};
我想声明这个类的对象:
myclass<a,b,c> x;
这显然不起作用,我似乎无法弄清楚如何声明这个对象,或者它是否可能。
我可以制作这样的对象:
myclass<int,double,int> x;
但我不想指定a,b,c的类型。
答案 0 :(得分:1)
在不拼写参数的情况下制作复杂模板实例的典型方法是使用类型推导函数模板:
template <typename A, typename B, typename C>
myclass<A, B, C> make_myclass(A a, B b, C C)
{
return myclass<A, B, C>(); // or whatever
}
用法:
auto x = make_myclass(1, 'x', -2.5f); // x is a myclass<int, char, float>
标准库中使用此习语的典型示例包括make_shared
,make_unique
,make_pair
,make_tuple
,make_exception_ptr
和make_optional
。
答案 1 :(得分:0)
如果我理解正确的话,你需要在模板函数或类中声明它。
template <typename a,typename b,typename c>
void F(){
myclass<a,b,c> x;
...
}
否则C ++和逻辑禁止它。
答案 2 :(得分:0)
c ++中没有typeindependent对象,每个对象在声明时都需要输入。实现类型擦除的唯一方法是使用void*
和指针转换等技术,您可以从boost type erasure找到