首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用标准类型的动态类型信息实例化标识符

用标准类型的动态类型信息实例化标识符
EN

Stack Overflow用户
提问于 2017-10-11 23:06:37
回答 2查看 126关注 0票数 0

我知道有更容易的方法来做这件事,但这是我的要求。

假设您有一个模板函数function1和另一个模板函数function2。

函数定义如下:

代码语言:javascript
复制
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()

正如我所说的,我知道可以用它来计算(推断)函数接收的参数。

代码语言:javascript
复制
const char* x = typeinfo(parameter).name;
// returns const char* 'm' on my machine

如果函数接收到泛型参数,是否也可以实例化同一类型的新对象。类似于:

代码语言:javascript
复制
<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 )是否可能。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-11 23:12:42

为此使用模板吗?

代码语言:javascript
复制
template <typename T> 
void foo(T yourParam)
{
    T newVar;  //Use of the deduced type to declare new variable
}

您也可以使用decltype

代码语言:javascript
复制
decltype(parameter) newVar;

由于您似乎坚持使用const char *,并且询问内置类型,为什么不使用switch语句呢?

代码语言:javascript
复制
switch(x)
{
    case 'm' : {
        unsigned long foo;
        //functionality
        break;
    }
    //other cases
    default : break;
}
票数 0
EN

Stack Overflow用户

发布于 2017-10-11 23:29:09

您可以使用解密类型从任何表达式中提取该类型,例如使用该类型来声明另一个变量:

代码语言:javascript
复制
decltype(1 + 3.14159) e;
e = 2.7182818;

但这适用于编译时类型信息(“静态”类型)。没有基于动态类型的方法,也没有办法使用运行时类型数据(typeinfotypeid返回的对象,或者运行时可以捕获的任何其他对象)。充其量,您可以获取类型名称,写出一个C++源文件,并在其上调用C++编译器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46698862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档