【发布时间】:2021-02-18 09:59:19
【问题描述】:
我有一个函数,它有一个 T 类型的选项参数。
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是一个无操作的人吗?如果是这样,也许我们应该重新审视你的设计。
标签: c++ templates c++14 c++17 void