指向 char[] 类型的成员的指针的模板签名
template signature for pointer-to-member of type char[]
我写了一个比较器来检查对象的成员是否等于输入。这就像一个魅力,除了一个成员是一个字符[];
我搜索了互联网,C++ISO标准并尝试了很多,但我无法弄清楚。
这是简化的代码:
/*
* main.cpp
*
* Created on: Nov 17, 2012
* Author: martijn
*/
#include <string.h>
class Data {
public:
Data() {
strcpy(Name, "MyCharArray");
};
virtual ~Data();
char Name[12];
};
template <class ClassT, char (ClassT::*Name)[]> // What should be here?!
class Comparator {
public:
Comparator() {};
~Comparator() {};
};
int main() {
Comparator<Data, &Data::Name> comparatorArray;
return 0;
}
问题区域(至少我是这样认为的)在代码中指示。当前代码不正确。编译器说:
错误:无法将模板参数"&数据::名称"转换为"字符(数据::*)[]"
您需要在模板参数类型中指定数组绑定:
template <class ClassT, char (ClassT::*Name)[12]>
或者可能:
template <class ClassT, std::size_t N, char (ClassT::*Name)[N]>
并使用:
// Note, this is a declaration of a function, is this correct?
Comparator<Data, 12, &Data::Name> comparatorArray();
回答此类问题的一种简单方法是使用编译器错误消息。
使用泛型参数创建一个模板函数,该参数在传递参数时明显无法编译。 然后查看错误消息,它通常会告诉您T是什么。 我传统的编译失败是一个大小为零的数组:如果你的编译器很聪明,使用int x[sizeof(T)-sizeof(expression with the same type as your test var)]
但只有一个零可以在一些懒惰的编译器中工作。
相关文章:
- 如果基类包含双指针成员,则派生类的构造函数
- C++正确的指针成员初始化
- 是否可以使用智能指针成员设置具有另一个结构的结构?
- 为什么 operator() 处的指针成员不起作用?
- 更改队列指针成员的值需要在 C++ 中出现奇怪的错误
- 如何从另一个嵌套类中调用某个封闭类的嵌套类的函数指针成员的值?
- 结构对象的指针成员在传递给函数时被修改
- 参数的混合值,当我调用指针成员函数时
- 如何正确使用结构的共享指针成员?
- C++:私有类指针成员返回未定义的值
- 在函数中传递带有指针成员的结构是浅拷贝或深拷贝在 C 中
- 包含指针成员的嵌套结构
- 在 c++ 中,为什么 -> 被称为二进制中缀指针成员访问运算符?
- C++ 类指针成员行为奇怪(错误)
- 常量结构的指针成员
- 在类C++指针成员中
- 指针成员未在复制构造函数中初始化
- C++移动拥有指针成员的构造函数
- C++ 包含唯一指针成员变量的类的赋值运算符
- 如何使用 QPoint 指针成员对类进行排队和取消排队