class Foo // Empty class
{
};
template <class T> // Abstract class
class Comparator
{
public:
virtual ~Comparator() {}
virtual bool operator()(const T& e1, const T& e2) = 0;
};
// Mother class that contains a map and some other methods that I did not copied here
template <class Key, class Value, class Comparator = std::less<Key> >
class Mother
{
private:
std::map<Key, Value, Comparator> data_;
};
// Daughter class that wants to use its own Comparator (called Nested)
class Daughter : public Mother<Foo, Foo, typename Daugher::Nested>
{
public:
class Nested : public Comparator<Foo>
{
bool operator()(const Foo& e1, const Foo& e2)
{
return true; // Not my real code. However, what would it mean to always return true in this kind of operation ? std::map would be pretty unusable, i guess ?
}
}
};
此代码不能编译为G ++不能访问Nested
,因为我没有访问嵌套之前解决Daugher的模板。如果我写Daughter<?????>::Nested
,我想可能会有效。但是,我需要给Daughter
自己的比较器,我无法访问,因为这需要我通过Daughter<?????>
和递归访问它。解决模板与嵌套类
我非常确定,我正在尝试做的事情在C++中是无效的,因为在访问它的嵌套类之前我应该解决Daughter
。然而,我的Nested
类非常简单,并且不需要上层的类来真正定义。
所以,我可以宣布Nested
外Daughter
,称这是FooComparator
或东西,但它似乎吸尘器说,这是Nested
内Daughter
。
请注意,我不希望在Foo
范围内申报operator<
,因为在我的真实情况下,它代表的是城市,我认为对城市申报operator<
并不是很干净。
是否有一个更清洁的选项,以便我可以声明我的女儿类并要求它使用它自己的比较器?
和可能,',''里面Daughter'。 – Jarod42