使用标准类型的动态类型信息实例化标识符
Instantiating identifier with dynamic type info on standard types
我知道有更简单的方法可以做到这一点,但这就是我要问的。
假设您有一个模板函数 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"断言的参考在这里: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
我在这里看到:从动态类型信息创建一个新对象,对象是不可能的,但我想知道像 int 这样的内部类型是否可以。
谢谢!
为此使用模板?
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;
}
您可以使用 decltype 从任何表达式中提取类型,例如使用它来声明另一个变量:
decltype(1 + 3.14159) e;
e = 2.7182818;
但这适用于编译时类型信息("静态"类型)。 没有办法基于动态类型来做到这一点,也没有办法使用运行时类型数据(typeid
返回的typeinfo
,或者你可以在运行时捕获的任何其他对象)。 充其量,您可以获取类型名称,写出一个C++源文件,并在其上调用C++编译器。
相关文章:
- Keil armcc 生成类型信息名称,即使使用 --no_rtti_data
- 错误:未定义对"静脉类型信息::电池访问"的引用
- 如何在编译过程中输出C 类型信息
- 如何在C 中检查确切的类型信息(具有CV-REF-POIRT特征)
- 共享库中非模板基的模板子类导致未定义的符号类型信息'class'链接错误
- 为什么C++不使用集中存储类型信息以实现高效的 RTTI
- 给定DDS主题名称,可以在运行时确定主题类型信息
- 使用友元函数从多态类中检索类型信息
- 如何在函数模板中隐式推导数组中元素的类型信息
- 使用标准类型的动态类型信息实例化标识符
- 超载功能没有上下文类型信息
- 对"vtable for "命名空间继承的未定义引用 对"类型信息"的未定义引用
- 多映射插入键类型信息 std::make_pair vs std::p air 构造函数
- Visual Studio-使用PDB进行调试,但缺少类型信息
- 如何在不同的上下文(例如线程)中保留原始异常类型信息
- C++正在传输运行时条件类型信息
- C++虚拟表上的虚拟定义器和类的类型信息
- C++测试宏定义的类型信息值
- 编译器不可知的运行时类型信息
- C++类型信息