【发布时间】:2013-04-30 17:28:33
【问题描述】:
嗨 :) 我环顾了这个问题,似乎有很多相关的帖子,但到目前为止没有一个答案可以解决我的问题。如果您知道回答此特定问题的帖子,请告诉我是哪一个,我将删除此帖子。
这就是我想要做的;我有一个带有一个模板参数的类,其默认值对应于模板特化。到目前为止(见下面的代码),它没有编译。让我感到困扰的是 two 模板参数和部分模板专业化的类似情况编译并且工作正常..:/
我做错了什么?
案例 1:两个模板参数(编译和工作)
标题
#include <iostream>
struct Special {};
template <class T, class U = Special>
class Bird
{
public:
inline void operator() () { sing(); }
inline void sing() const { std::cout << "Piu piu piu" << std::endl; }
private:
T t; U u;
};
template <class T>
class Bird<T,Special>
{
public:
inline void operator() () {}
private:
T t; Special u;
};
cpp
int main()
{
Bird<double,int> a;
Bird<double> b;
a(); b();
}
案例 2:一个模板参数(不编译)
标题
#include <iostream>
struct Special {};
template <class U = Special>
class Bird
{
public:
inline void operator() () { sing(); }
inline void sing() const { std::cout << "Piu piu piu" << std::endl; }
private:
U u;
};
template <>
class Bird<Special>
{
public:
inline void operator() () {}
private:
Special u;
};
cpp
int main()
{
Bird<int> a;
Bird b;
a(); b();
}
我收到一个错误:在“b”之前缺少模板参数。提前感谢您抽出宝贵时间阅读本文! :)
【问题讨论】:
标签: c++ templates template-specialization partial-specialization