【发布时间】:2015-12-22 15:26:37
【问题描述】:
编辑:当我去度假时,我实际上并没有机会测试任何建议的解决方案,当我回来时,负责课程模板的人进行了一些更改,使我能够绕过使用类模板本身中定义的类型的需要。
感谢大家的帮助。
简而言之 - 随意更正我的措辞,模板对我来说仍然有点巫术, - 我需要知道我是否可以使用 (protected) struct 或内部定义的 #typedef我的专业课的课程模板。例如:
这是类模板:
template<typename T>
class A : public C<T>
{
protected:
struct a_struct { /* Class template implementation, doesn't depend on T */ };
void foo( a_struct a );
};
我需要完全专注于T = VAL:
template<>
class A< VAL > : public C< VAL >
{
void foo( a_struct a )
{
// My implementation of foo, different from the class template's
}
};
但是,如果我这样做,编译器会抱怨 a_struct 在我的专用类中未定义。我尝试专门化并从类模板继承,但这变得……混乱。
我看到了一些解决方案,但所有这些都涉及修改类模板,这是我无法轻易做到的(不同的团队)。
想法?
【问题讨论】:
-
查看关于 SO 的许多其他问题之一,其中解释了模板中对
typename的需求:stackoverflow.com/questions/610245/… -
对不起,我最初误解了你的问题。您不想从基类继承类型,而是从自己的非专业版本继承。
-
我认为你可以在不“修改”原件的情况下创建一个假基地。创建一个继承自原始的类并与假基类成为朋友,因此假基类可以将类型定义从原始保护区域窃取到自己的保护区域中。然后使用那个假基地作为专业化的真实基地。
标签: c++ templates template-specialization specialization