我决定编写一个不起作用的愚蠢代码:
template <class T, class Container>
class reversible_stack : protected std::stack<T, Container>
{
public:
void reverse()
{
std::reverse(std::begin(c), std::end(c));
}
};
需要 this->c
而不是c
。
然而,此处不需要this
:
namespace a
{
class base
{
protected:
int i;
};
};
class derived : protected a::base
{
public:
void foo() { i; }
};
__attribute__ ((__visibility__ ("default")))
没有任何区别。
您可以在此处查看libstdc++代码。需要this
的区别是什么?
编辑:这不是重复。请参阅以下代码:
namespace standard
{
template <typename T>
class container
{
protected:
int i;
};
template <typename T, typename Container = container<T>>
class base
{
protected:
Container c;
};
}
class derived : protected standard::base<int>
{
public:
void foo() { c; }
};
请注意base
不需要从container
继承,就像stack
不需要从deque
(容器)继承一样。然而这compiles。
有人会说&#34;它是一个实现细节&#34;,但变量名c
由标准[23.2.3.1]指定。