为什么C++不允许我使用typeof?

Moh*_*kar 8 c++ visual-c++ c++11

我正在使用以下代码与C++ 11并得到一个我不允许使用的错误typeof!

有什么问题以及如何解决这个问题?

错误 :

Error   10  error C2923: 'typeof' is not a valid template type argument for parameter 'C'
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

#define HIBERLITE_NVP(Field) hiberlite::sql_nvp< typeof(Field) >(#Field,Field)


class Person{
friend class hiberlite::access;
template<class Archive>
void hibernate(Archive & ar)
{
    ar & HIBERLITE_NVP(name); //ERROR
    ar & HIBERLITE_NVP(age);  //ERROR
    ar & HIBERLITE_NVP(bio);  //ERROR
}
public:
string name;
double age;
vector<string> bio;
};
Run Code Online (Sandbox Code Playgroud)

sql_nvp是这样的:

template<class C>
 class sql_nvp{
public:
    std::string name;
    C& value;
    std::string search_key;

    sql_nvp(std::string _name, C& _value, std::string search="") :    name(_name), value(_value), search_key(search) {}
 };
Run Code Online (Sandbox Code Playgroud)

And*_*owl 27

你在寻找的是decltype():

#define HIBERLITE_NVP(Field) hiberlite::sql_nvp< decltype(Field) >(#Field,Field)
//                                               ^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

C++没有调用运算符typeof.

  • 值得一提的是`typeof`和`decltype`之间存在差异.根据提供`typeof(X)`的编译器和版本,它更像是`std :: decay <decltype((X))> :: type`而不是raw`decltype(X)`. (2认同)
  • @blue:没必要.OP明确写道:"*我正在使用以下代码与C++ 11*" (2认同)