代码之家  ›  专栏  ›  技术社区  ›  Jeff

是否允许成员函数声明具有来自非推导模板参数的签名?

  •  3
  • Jeff  · 技术社区  · 6 年前

    template <typename Sig>
    struct IFoo { virtual Sig operator() = 0; }; // XXX, but OK with non-templated aliases...
    

    编译器正在处理 Sig 作为实例化之前的非函数类型,我想我只是在寻找一种方法来强制系统放弃对该类型的早期信念。这是不可能的,还是我还没有偶然发现正确的语法?

    我明确希望避免通常的专业化归纳推理:

    template <typename Sig> struct IFoo;
    
    template <typename R, typename... Args>
    struct IFoo<R(Args...)> { virtual R operator()(Args...) = 0; };
    
    template <typename R, typename... Args>
    struct IFoo<R(Args...) const> { virtual R operator()(Args...) const = 0; };
    

    const 沿着 noexcept

    template <typename Sig> struct IBar;
    
    template <typename R, typename... Args, bool IsNoExcept>
    struct IBar<R(Args...) noexcept(IsNoExcept)> {
        virtual R operator()(Args...) noexcept(IsNoExcept) = 0;
    };
    

    不幸的是我被困在C++ 14中,但是没有魔法。 if constexpr

    0 回复  |  直到 6 年前