模板参数:指向成员的指针-我应该如何处理它? C++草案表示
非类型模板参数应具有以下之一: (可选cv限定)类型:-整型或枚举类型- 指向对象的指针或指向函数的指针,-指向对象的左值引用 或函数的左值引用,-指向成员的指针- std::nullptr\t 在下面的代码中,我有一个指向作为模板参数传递的成员的指针模板参数:指向成员的指针-我应该如何处理它? C++草案表示,c++,templates,C++,Templates,非类型模板参数应具有以下之一: (可选cv限定)类型:-整型或枚举类型- 指向对象的指针或指向函数的指针,-指向对象的左值引用 或函数的左值引用,-指向成员的指针- std::nullptr\t 在下面的代码中,我有一个指向作为模板参数传递的成员的指针 using namespace std; class MyClass { public: int membervar; }; template< int (MyClass::*var) > struct A {
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::我不知道如何回答这个问题!如果你想使用指向成员的指针,那么你需要一个对象。就这么简单。太好了!!谢谢你今天我通过指向成员变量和函数的指针学到了一些东西!非常感谢你的帮助!我今天学到了一些新东西!!