我知道有更容易的方法来做这件事,但这是我的要求。
假设您有一个模板函数function1和另一个模板函数function2。
函数定义如下:
template <typename A>
void function1(A x) // typename A is part of a class-template function
// the typename is declared in the class instantiation
// and passed to function2
template <typename B>
void function2(B y) // I know I can use typeinfo(y).name to get name
// this returns a const char* 'm'
// 'm' stands for unsigned long on my sytem“m”断言的引用如下:Strange output of std::typeid::name()
正如我所说的,我知道可以用它来计算(推断)函数接收的参数。
const char* x = typeinfo(parameter).name;
// returns const char* 'm' on my machine如果函数接收到泛型参数,是否也可以实例化同一类型的新对象。类似于:
<x> foo;
// where x represents the const char* = 'm'
// which in turn is represented by unsigned long on my system
// so foo would be an uninstantiated unsigned long identifier我在这里看到:Creating a new object from dynamic type info,对象是不可能的,但我想知道内部类型(如int )是否可能。
谢谢!
发布于 2017-10-11 23:12:42
为此使用模板吗?
template <typename T>
void foo(T yourParam)
{
T newVar; //Use of the deduced type to declare new variable
}您也可以使用decltype
decltype(parameter) newVar;由于您似乎坚持使用const char *,并且询问内置类型,为什么不使用switch语句呢?
switch(x)
{
case 'm' : {
unsigned long foo;
//functionality
break;
}
//other cases
default : break;
}发布于 2017-10-11 23:29:09
您可以使用解密类型从任何表达式中提取该类型,例如使用该类型来声明另一个变量:
decltype(1 + 3.14159) e;
e = 2.7182818;但这适用于编译时类型信息(“静态”类型)。没有基于动态类型的方法,也没有办法使用运行时类型数据(typeinfo,typeid返回的对象,或者运行时可以捕获的任何其他对象)。充其量,您可以获取类型名称,写出一个C++源文件,并在其上调用C++编译器。
https://stackoverflow.com/questions/46698862
复制相似问题