【问题标题】:Optionally optional default function arguments depending on template arguments可选的可选默认函数参数,取决于模板参数
【发布时间】:2022-07-20 17:57:27
【问题描述】:

一位学生问我以下问题:函数的参数是否可以根据模板参数是可选的?

也就是说,给定:

struct Car{};
struct Plane{};

struct OptionCar{};
struct OptionPlane1{};
struct OptionPlane2{};

template <typename T, typename U>
void foo(const T& a, const T& b, U option /* = ??? */) ;

应该可以使用默认参数调用 Car:

Car c;
foo(c, c); // invokes foo(const Car&, const Car&, OptionCar);

但不适用于飞机:

Plane p;
foo(p, p); // compile error
foo(p, p, OptionPlane1{}); // ok
foo(p, p, OptionPlane2{}); // ok

【问题讨论】:

    标签: c++


    【解决方案1】:

    我目前的解决方案是:

    template<typename T, typename U = std::conditional_t<std::is_same_v<Car, T>, OptionCar, void>>
    void foo(const T& a, const T& b, U option = {});
    

    但感觉有点像 hack。对更好的东西感到好奇。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-12
      • 1970-01-01
      • 2012-05-26
      相关资源
      最近更新 更多