gpt4 book ai didi

c++ - 检查函数调用表达式的正确性

转载 作者:可可西里 更新时间:2023-11-01 15:22:31 24 4
gpt4 key购买 nike

std::result_of 在编译时计算调用表达式的返回类型。

作为the reference表示,如果调用格式不正确,std::result_of 的实例化会导致编译错误。但是假设我们需要的是在获取结果类型之前检查调用是否格式正确。

有什么方法可以编写特征来检查调用表达式是否格式正确?

类似于:

template<typename F , typename... ARGS>
struct is_valid_call : public impl::is_valid_call<F,typelist<ARGS...>>
{};

namespace impl
{
struct sfinae_result{};

template<typename F , typename ARGS , typename ENABLED = sfinae_result>
struct is_valid_call;

template<typename F , typename... ARGS>
struct is_valid_call<F,typelist<ARGS...>,
decltype( std::declval<F>()(std::declval<ARGS>()...) )
> :
public std::true_type
{};

template<typename F , typename... ARGS>
struct is_valid_call<F,typelist<ARGS...>,sfinae_result> :
public std::false_type
{};
}

编辑: 当然发布了解决方案 doesn't work

最佳答案

这里有一些有用的东西:

#include <type_traits>
#include <utility>

template<typename F, typename... Args>
struct is_valid_call {
private:
template<typename FF, typename... AA>
static constexpr auto check(int) ->
decltype( std::declval<FF>()(std::declval<AA>()...), std::true_type());

template<typename FF, typename... AA>
static constexpr std::false_type check(...);
public:
static constexpr bool value = decltype(check<F, Args...>(0)){};
};

#include <cstdio>

int main()
{
printf("%d", int (is_valid_call<decltype(&puts), const char*>::value));
printf("%d", int (is_valid_call<decltype(&puts), double>::value));
}

输出:10

关于c++ - 检查函数调用表达式的正确性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24233516/

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