Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:如何获取变量的类型并将其用作模板_C++_Templates_Types - Fatal编程技术网

C++ C++;:如何获取变量的类型并将其用作模板

C++ C++;:如何获取变量的类型并将其用作模板,c++,templates,types,C++,Templates,Types,我在用这种方式声明函数C++的包装器: class MyClass { public: template <class T> T& as(); }; class MyClass2 : public MyClass { public: template <class T> void get(T & val); }; 是否有方法实现此函数,以便在运行时根据参数类型传递类型?比如: template <class T> void

我在用这种方式声明函数C++的包装器:

class MyClass
{
public:
  template <class T>
  T& as();
};
class MyClass2 : public MyClass
{
public:
  template <class T>
  void get(T & val);
};
是否有方法实现此函数,以便在运行时根据参数类型传递类型?比如:

template <class T>
void MyClass2::get(T & val)
{
  val = as< typeof(val) >();  /* Of course typeof does not exist */
}
模板
void MyClass2::get(T&val)
{
val=as();/*当然typeof不存在*/
}

非常感谢您的帮助。

这毫无意义。为什么不写:

template <class T>
void MyClass2::get(T & val)
{
  val = as< T >();
}
模板
void MyClass2::get(T&val)
{
val=as();
}

因为类型是一个模板参数,所以不需要
typeof

,正如@Space\u C0wb0y已经指出的那样,这实际上是不必要的。模板类型将根据参数自动推断

然而,C++0x实际上添加了您要求的内容,因为它可以让您编写:

template <class T>
void MyClass2::get(T & val)
{
  val = as< decltype(val) >();  /* typeof does not exist. But decltype does */
}
模板
void MyClass2::get(T&val)
{
val=as();/*typeof不存在。但decltype存在*/
}

当然,在这种情况下,它只是解决一个不存在的问题的更复杂的方法。但我想我还是要演示一下,因为它与您在问题中发布的伪代码非常相似。

听起来有点像您想在运行时创建模板类型?据我所知,你不能这么做
template <class T>
void MyClass2::get(T & val)
{
  val = as< decltype(val) >();  /* typeof does not exist. But decltype does */
}