c++ - 返回对象的类型;

标签 c++ templates

是否可以返回一个对象的类型?例如我想有这样的构造:

//pseudocode
    template<class T>
    void f(int value)
    {
    //depends on type T different action can be taken
    }

template<class T>
type getType(T obj)
{
return (type of obj);
}

然后在主要部分:

f<getType(Object)>(value);  

最佳答案

从某种意义上说是的,但你需要移动T成一个参数。这是 Eric Niebler 探索的条件技巧并解释了here .

template<typename T>
struct id { typedef T type; };

template<typename T>
id<T> make_id(T) { return id<T>(); }

struct get_type {
  template<typename T>
  operator id<T>() { return id<T>(); }
};

#define pass_type(E) (true ? get_type() : make_id((E)))

pass_type(expression)产生 id<T>这样的对象 T是该表达式的 cv 非限定类型。所以你可以这样做

template<class T>
void f(int value, id<T>)
{
    // Now go on as usual on T
}

f(value, pass_type(Object));

关于c++ - 返回对象的类型;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3846565/

相关文章:

c++ - 继承构造函数输出

c# - 为什么这个 P/Invoke 签名不起作用?

c++ - 使用不同偏移量加载的 VS 2010 和 VS 2005 生成的 Exe

c++ - 如果我只有依赖程序的 .o 文件,我可以在可执行文件中反射(reflect)头文件的变化吗

c++ - 如何编写接受每个类和类模板的 C++ 模板?

c++ - (SFINAEd) 模板函数的宏

html - 是否可以使用 Rollup 创建一个从模板注入(inject) HTML 的包?

c++ - 从派生类中使用关键字获取类型

c++ - 当画面中没有人脸时,OpenCV 中的人脸检测器变慢

c++ - 如何让构造函数接受所有类型的迭代器?