gpt4 book ai didi

c++ - 静态检测任何重载的 operator()

转载 作者:太空宇宙 更新时间:2023-11-04 13:26:44 28 4
gpt4 key购买 nike

<分区>

我使用以下方式,在 stackoverflow 答案中提出来确定一个类型是否可调用:

template <typename T>
struct is_callable
{
typedef char (& yes)[1];
typedef char (& no)[2];

// we need a template here to enable SFINAE
template <typename U>
static yes deduce(char (*)[sizeof(&U::operator())]);
// fallback
template <typename> static no deduce(...);

static bool constexpr value = std::is_function<T>::value || (sizeof(deduce<T>(0)) == sizeof(yes));
};

但是当一个类有多个 operator() 重载时它会失败:

#include <iostream>

template <typename T>
class A
{
T operator()();
T operator()(T a);
T operator()(T a, T b);
};

std::cout << is_callable<A<int>>::value; // false

是否可以确定一个类型是否具有重载 operator() 的任何变体(模板化与否,一个或多个)?

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