我想知道变量的类型

时间:2014-10-25 20:39:06

标签: c++ c++11 metaprogramming typetraits

我正在查看C ++ 11库,我没有使用C ++对象和模板,但我试图读取变量的类型并运行不同的代码,但这里有一个例子这更好地解释了:

if(is_scalar<typeid(list)>)
    cout << list << endl;
else
    for(...)
        cout << list[i] << endl;

我试图做类似的事情,我认为函数is_scalar正是我需要的,因为我需要从整数,双精度数或浮点数等分割向量,数组和列表。 很难想到在同一个程序中使用不同类型的相同变量但是我试图在运行时(仍然无法正常工作)或使用预处理器定义(这会导致我的问题)更改它现在)。

2 个答案:

答案 0 :(得分:0)

我解决了我的问题,我创建了这个code,我不得不修改一下

#include <iostream>
#include <vector>
using namespace std;

template< bool B > struct Algorithm {
    template<class T1> static int do_it (T1 & a) {
        for (int _n(((int)((a).size()))-1), i(0); i <= _n; i++)
            cout << *(next(a.begin(),i)) << endl;
        cout << endl; 
    }
};

template<> struct Algorithm<true> {
    template<class T1> static int do_it (T1 a)  { cout << a << endl; }
};

template<class T1>
int elaborate (T1 A)
{
    return Algorithm<std::is_scalar<T1>::value>::do_it( A ) ;
}

int main(){
    int a = 42;
    vector<int> b;
    b.push_back(1);
    b.push_back(2);
    elaborate(a);
    elaborate(b);
    return 0;
}

最后,decltype没有用,因为编译器试图“读取”从未被“使用过”的代码。

答案 1 :(得分:0)

您是否尝试过使用decltype?这可以帮到你。

http://en.cppreference.com/w/cpp/language/decltype