没有对象的模板打印成员变量

时间:2013-03-02 16:40:37

标签: c++ templates

这很奇怪(MSVC2012):

using namespace std;

class MyClass
{
public:

    int membervar;
};

template< int (MyClass::*var) > struct A 
{
   void print()
   {
       cout << var;
   }
};

int main(int argc, char *argv[])
{
   struct A <&MyClass::membervar> object;

   object.print();
}

此代码编译并实际播出“1”。它从哪里来的? membervar属于哪个对象?我以为我需要一个对象来访问数据成员

2 个答案:

答案 0 :(得分:1)

  

此代码编译并实际播出“1”。它在哪里得到它?

在:

中会发生什么
int (MyClass::*var) = &MyClass::membervar;
cout << var;

因为没有移位运算符接受流和成员指针,所以选择另一个移位运算符:

std::ostream::operator<<(bool);

换句话说,在将其转换为var后,它会打印bool

答案 1 :(得分:0)

  

此代码编译并实际播出“1”。它在哪里得到它??

您要打印的是指向成员函数的指针

它正在转换为bool。那个bool正在评估为true,这意味着它不是零。

相关问题