我有一个派生的 basic_ostream 类和一个内联修饰符(类似于 setw)。我的流类还应该从其父类继承所有运算符 << 行为。根据我是否使用“using”关键字,我会得到不同的编译器错误:
#include <iostream>
struct modifier { };
template <typename C, typename T=std::char_traits<C> >
struct mystream : public std::basic_ostream<C, T>
{
// this is where the trouble is
using std::basic_ostream<C, T>::operator <<;
inline mystream & operator << (const modifier & mod)
{
// ...custom behavior...
return *this;
}
};
int main()
{
mystream<char> foo;
modifier m;
foo << "string"; // this fails if the using is present
foo << 123; // this fails if the using is absent
foo << m;
}
当我输入 using 指令时,编译器对“字符串”输出感到困惑,如果我将其注释掉,它会对整数 123 输出感到困惑,在这两种情况下都会给我“错误:'operator<< '”。我对 g++ 4.2.1 和 g++4.8 都有问题。这里的正确前进方向是什么?