std::declval是一个模板函数,只有声明没有实现,常用于和decltype、sizeof等关键字配合使用进行类型推导、占用内存空间计算等,长相如下: template <typename T> add_rvalue_reference_t<T> declval() noexcept; 说白了,就是给定任何类型,返回其其右值引用(会运用引用折叠规则),比如: 输入int得到int && 输入int ...
如果觉得虚函数与其重载如此痛苦竟然不能忍的话,你可以考虑谈 C++17 里的 Builder 模式 所介绍的 CRTP惯用法的能力,CRTP 在模板类继承体系中是个很强大的编译期多态能力。 除此而外,还可以放弃基类抽象化的设计方案,改用所谓的运行时多态 trick 来设计类体系。 Runtime Polymorphism 这是一种由 Sean Parent 提供...
用法1:求函数返回类型:void commonF(int,double,char){}; template<class F,class... Args>//F:可调用对象 类型; Args:F的参数类型 using InvokeResultOfFunc = decltype(declval<F>()(declval<Args>()...)); int main(){ //不仅可以用于普通函数, 还可用于函数对象的求返回类型 InvokeResultOfFunc<...