在这篇文章中,建议使用以下方法为operator<<定义dump()成员函数的所有类定义函数:
template <typename T, typename charT>
auto operator<< (std::basic_ostream<charT> & str, const T & t) -> decltype(t.dump(str))
{
return t.dump(str);
}
Run Code Online (Sandbox Code Playgroud)
为什么这个函数模板没有捕获所有类型,包括那些没有定义dump成员函数的类型?我的意思是,是否在选择过载时考虑了函数签名的返回类型部分?
以下代码基于C++模板的第298页上的示例:完整指南.我删除了与我的问题无关的部分.
class Virtual {
public:
virtual void foo() {
}
};
class Base : private Virtual {
public:
void foo() {
std::cout << "Base::foo()" << '\n';
}
};
class Derived : public Base {
public:
void foo() {
std::cout << "Derived::foo()" << '\n';
}
};
int main()
{
Base *p = new Derived;
p->foo(); // calls Derived::foo()
}
Run Code Online (Sandbox Code Playgroud)
我不明白电话是如何p->foo()结束通话的Derived::foo.更具体地说,静态类型p是Base*.Base::foo是非虚拟的.现在,Base私有地继承自'Virtual',它有自己的foo,看起来好像从Base::foo某种程度上得到了virtual …
考虑:
./wordcount.py < war_and_peace.txt | sort -grk 2 | head
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,以下代码也有效并产生相同的输出:
./wordcount.py < war_and_peace.txt sort -grk 2 | head
Run Code Online (Sandbox Code Playgroud)
后一个命令如何解释?管道是否sort隐式发生?
是不是,在没有显式指针的面向对象语言中,所有对象都必须是引用?
\n这里的引用就像标签引用中定义的那样:
\n\n\n引用是一个值,它使程序能够间接访问计算机内存或其他存储设备中的特定数据,例如变量或记录。
\n
这是我的推理。考虑一下如果我们将数据结构作为参数传递给函数会发生什么。该数据结构可能很大,因此我们绝对不希望创建副本。在具有显式指针的语言中,我们将传递一个指向数据结构的指针。在没有显式指针的语言中,参数最好隐式地充当指针,并提供对数据结构的间接访问。换句话说,最好有一个参考。
\n仅当我开始提问时的陈述是错误的时才需要答复。在这种情况下,解释为什么上述推理不合理会对我和未来的读者有所帮助。
\n