我有一个函数,其中有一个类型为 T 的可选参数。
理想情况下,我希望有一种更优雅的解决方案来重载“Void”函数,而不需要诉诸于第三个声明?尤其是随着新的C++17解决了这么多问题!一个更简洁的语法会更好...
template<typename T>
void foo( const T& t = T() )
{ t.stuff; }
一切都很顺利,但我现在有一种情况,其中T变为void
。 在这种情况下,我期望是一个不执行任何操作的空函数。我唯一可行的解决方案需要三个单独的声明,我有许多这样的方法:
template<typename T>
void foo( const T& t)
{ t.stuff; }
template<typename T>
inline void foo()
{ foo(T()); }
template<>
inline void foo<void>() {}
理想情况下,我希望有一种更优雅的解决方案来重载“Void”函数,而不需要诉诸于第三个声明?尤其是随着新的C++17解决了这么多问题!一个更简洁的语法会更好...
T
是void
,那么t.stuff()
应该做什么?看起来我们应该希望编译器出现错误。你真的打算调用foo
时不执行任何操作吗?如果是这样,也许我们应该重新审视你的设计。 - AndyG