Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
模板参数:指向成员的指针-我应该如何处理它? C++草案表示_C++_Templates - Fatal编程技术网

模板参数:指向成员的指针-我应该如何处理它? C++草案表示

模板参数:指向成员的指针-我应该如何处理它? C++草案表示,c++,templates,C++,Templates,非类型模板参数应具有以下之一: (可选cv限定)类型:-整型或枚举类型- 指向对象的指针或指向函数的指针,-指向对象的左值引用 或函数的左值引用,-指向成员的指针- std::nullptr\t 在下面的代码中,我有一个指向作为模板参数传递的成员的指针 using namespace std; class MyClass { public: int membervar; }; template< int (MyClass::*var) > struct A {

非类型模板参数应具有以下之一: (可选cv限定)类型:-整型或枚举类型- 指向对象的指针或指向函数的指针,-指向对象的左值引用 或函数的左值引用,-指向成员的指针- std::nullptr\t

在下面的代码中,我有一个指向作为模板参数传递的成员的指针

using namespace std;

class MyClass
{
public:

    int membervar;
};


template< int (MyClass::*var) > struct A 
{
   // What am I supposed to do with *var? There isn't an object instance to use it!
};

int main(int argc, char *argv[])
{

   struct A <&MyClass::membervar> object;

}
使用名称空间std;
类MyClass
{
公众:
int-membervar;
};
模板结构A
{
//我该怎么处理*var?没有对象实例可以使用它!
};
int main(int argc,char*argv[])
{
构造一个对象;
}
以上代码编译(MSVC2012)时没有错误


问题是:我不知道我该如何处理这样一个指针,没有对象实例可以使用它

template< int (MyClass::*var) > struct A 
{
   void foo()
   {
      MyClass Blah;
      Blah.*var = 3;
   }
};
template结构A
{
void foo()
{
我的课堂废话;
Blah.*var=3;
}
};

我认为回答这个问题的唯一方法是构造一个示例:

template< int (MyClass::*var) > struct A 
{
    A() {
        MyClass myclass;
        myclass.*var = 42;
        cout << myclass.*var << "\n";
    }
};
template结构A
{
(){
MyClass MyClass;
myclass.*var=42;

cout没有什么可以阻止
A
MyClass
作为参数的方法,尽管:

template <int (MyClass::*var)>
struct A {
    int get(MyClass const& mc) const { return mc.*var; }
    void set(MyClass& mc, int i) { mc.*var = i; }
};

int main() {
    MyClass mc;

    A<&MyClass::membervar> a;

    a.set(mc, 3);
    std::cout << a.get(mc) << "\n"; // prints 3
}
模板
结构A{
int get(MyClass const&mc)const{return mc.*var;}
空集(MyClass&mc,inti){mc.*var=i;}
};
int main(){
MyClass mc;
A A;
a、 组(mc,3);

std::我不知道如何回答这个问题!如果你想使用指向成员的指针,那么你需要一个对象。就这么简单。太好了!!谢谢你今天我通过指向成员变量和函数的指针学到了一些东西!非常感谢你的帮助!我今天学到了一些新东西!!