模板标签难题
A Template-Tag Perplexity
我已经设法将我的困惑浓缩为以下代码:
template<typename T>
class BTI {
public:
char func(char);
};
template<int i>
class Tag {};
template<int i> unsigned char
BTI<Tag<i> >::func(char c) {
return c;
}
这是为了:
- 声明模板类CCD_ 1
- 声明模板化标记类
Tag
,以及 - 当
BTI
的模板参数是Tag<i>
时,提供func
的模板专用实现
当我通过g++ -fsyntax-only
(使用g++4.1.2.)运行时,我得到:
test.cc:11: error: invalid use of undefined type ‘class BTI<Tag<i> >’
test.cc:2: error: declaration of ‘class BTI<Tag<i> >’
test.cc:11: error: template definition of non-template ‘unsigned char BTI<Tag<i> >::func(char)’
我甚至不知道在这一点上该尝试什么。有什么想法吗?
如果你正在尝试我认为你正在尝试的东西,那么你需要完全专门化BTI
,而不仅仅是一个函数;像这样:
template<typename T>
class BTI {
public:
unsigned char func(char);
};
template<int i>
class Tag {};
template<int i>
class BTI<Tag<i> > {
public:
unsigned char func(char);
};
template<typename T> unsigned char
BTI<T>::func(char c) {
return 'X';
}
template<int i> unsigned char
BTI<Tag<i> >::func(char c) {
return c;
}
int main() {
BTI<int> x;
BTI<Tag<0> > y;
std::cout << x.func('a') << std::endl;
std::cout << y.func('a') << std::endl;
}
这将首先打印'X'
(一般情况),然后打印'a'
(特殊情况)。
相关文章:
- C 和 C++ 中开关语句的案例标签的常量值,但显示不同的行为
- 如何正确指定 goto 语句的标签?
- 使用g++静态初始化带有命名标签的嵌套C++结构
- 通过水平滚动条更改标签
- 从 QFontDatabase 设置 QFont 将所有标签设置为等宽字体?Qt C++
- 在C++中存储要输入的标签列表
- 如何在等效列表中查找最小的连接标签
- 标签检测鼠标单击 c++
- 无法将行编辑中的文本打印到 Qt C++ 中的标签
- 如何根据C++中的标签运行特定函数?
- C++ Expat 仅打印元素的第一个字母和标签中的数据
- 默认标签显然在 switch 语句中不起作用
- 解决难题(最佳解决方案)
- 在 gcc/clang (C++) 中获取函数范围之外的标签地址
- 在"printf"中使用标签"h"或"hh"是否涉及未定义的
- GTK 3 C++按钮中带有标签的图标
- 如何使QLineSeries/QXYSeries仅显示一个点标签
- SFINAE和标签调度之间的差异
- 如何在主窗口标签的对话框中显示QLineEdit的输入
- 模板标签难题