gpt4 book ai didi

C++ : syntax for is_member_function_pointer in a template declaration

转载 作者:太空狗 更新时间:2023-10-29 21:23:09 26 4
gpt4 key购买 nike

我有一个模板,其中包含与此类似的声明:

template <typename Arg0, typename... Args>
class blah {};

我有两个版本的模板,当Arg0是成员函数指针时我想使用一个,否则使用另一个。我正在尝试使用 std::enable_if 和 std::is_member_function_pointer 但我找不到正确的语法。这是我对真实案例的看法:

template<typename = typename std::enable_if< std::is_member_function_pointer<Arg0> >::type, typename... Args>
class blah() {}

但这显然在句法上是不正确的。

最佳答案

当对类使用 bool 谓词时,我通常使用两种方法来做出选择:

  1. 如果我只需要在两种类型之间进行选择,我会使用类似的东西

    typename std::conditional<
    std::is_member_function_pointer<F>::value,
    type_when_true, type_when_false>::type
  2. 如果事情需要改变的不止于此,我会从一个专门针对涵盖两种实现选择的 bool 值的基础派生:

    template <bool, typename...>
    struct helper;

    template <typename... A>
    struct helper<true, A...> {
    // implementation 1
    };
    template <typename... A>
    struct helper<false, A...> {
    // the other 1
    };
    template <typename F, typename... A>
    struct actual
    : helper<std::is_member_function_pointer<F>::value, F, A...>
    {
    // typedefs, using ctors, common code, etc.
    };

关于C++ : syntax for is_member_function_pointer in a template declaration,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18875001/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com