Arm*_*yan 38 c++ templates template-specialization
假设我是某个模板库(CTL
)的用户,它定义了一个名为的模板,比方说,Hector
template <class T>
class Hector {...};
Run Code Online (Sandbox Code Playgroud)
在其文档中,它提供了许多关于Hector
模板行为的保证.但是它还定义了某种类型的特化Cool
template <>
class Hector<Cool> {....};
Run Code Online (Sandbox Code Playgroud)
专业化的目的是更优化的实现Hector
,但不幸的是,由于这种优化,许多保证Hector
被违反.
目前我真的不需要优化,我宁愿保留所有的保证Hector
.有没有办法,如果不改变库代码(CTL
是一个非常值得尊敬的库,你知道),绕过专业化吗?有什么办法吗?也许写一些包装?什么?我只想让编译器以Hector<Cool>
正常的,非优化的方式生成代码,并提供所有保证.
不.即使它可以以某种深奥的方式完成,也不要.规避语言功能应引发警报.
你必须包装值或使用不同的类型char
而不是bool
(它们表现相似),std::vector<char>
而不是std::vector<bool>
.
这是一个小的通用伪装:
template <typename T>
struct Drool
{
Drool(T d) : b(d) { }
inline operator T() const { return b; }
inline Drool<T> & operator=(T d) { b = d; return *this; }
private:
T b;
};
Run Code Online (Sandbox Code Playgroud)
现在你可以说Hector<Drool<Cool>>
.
根据Xeo的改进版本:
template <typename T>
struct Drool
{
Drool(const T & d) : b(d) { }
Drool(Drool && o) = default;
inline operator const T & () const { return b; }
inline operator T & () { return b; }
private:
T b;
};
Run Code Online (Sandbox Code Playgroud)