C++ 模板类的类型无关对象

C++ 模板类的类型无关对象,c++,templates,type-deduction,C++,Templates,Type Deduction,我又被卡住了 我有一个模板类: template <typename a,typename b,typename c> class myclass {...}; 模板 类myclass {...}; 我想声明此类的一个对象: myclass<a,b,c> x; myclass x; 这显然不起作用,而且我似乎无法确定如何声明这个对象,或者这是否可能 我可以制作这样一个对象: myclass<int,double,int> x; myclass x;

我又被卡住了

我有一个模板类:

template <typename a,typename b,typename c>
class myclass
{...};
模板
类myclass
{...};
我想声明此类的一个对象:

myclass<a,b,c> x;
myclass x;
这显然不起作用,而且我似乎无法确定如何声明这个对象,或者这是否可能

我可以制作这样一个对象:

myclass<int,double,int> x;
myclass x;

但我不想指定a、b、c的类型。

如果我理解正确,您需要在模板函数或类中声明它

template <typename a,typename b,typename c>
void F(){
   myclass<a,b,c> x;
   ...
}
模板
void F(){
myclass x;
...
}

< C++ >逻辑禁止。

< P> C++中没有独立于类型的对象,每个对象在声明时都需要键入。实现类型擦除的唯一方法是使用诸如
void*
和指针转换之类的技术,您可以从中找到创建复杂模板实例而不拼写参数的典型方法是使用类型推断函数模板:

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
}
模板
myclass make_myclass(A、B、C)
{
返回myclass();//或其他任何内容
}
用法:

auto x = make_myclass(1, 'x', -2.5f);   // x is a myclass<int, char, float>
auto x=make_myclass(1,'x',-2.5f);//x是一个myclass
标准库中使用此习惯用法的典型示例有
make\u shared
make\u unique
make\u pair
make\u tuple
make\u exception\u ptr
make\u optional