gpt4 book ai didi

c++ - 从模板函数返回默认构造或无效

转载 作者:搜寻专家 更新时间:2023-10-31 01:24:41 24 4
gpt4 key购买 nike

我有一个函数用异常处理包装另一个调用。大多数调用不返回任何东西(void),但对于某些调用,函数可能返回 int 或类似的东西。这工作正常,除了我在 default 返回 val 或 return void 上苦苦挣扎。

我目前正在看类似下面的内容

template<class T> struct member_function_trait;
template<class T, class R> struct member_function_trait<R T::*> { using type = T; using ret = R; };



template<auto f, class T, typename... Args>
auto DispatchImpl(T* obj, Args&&... args) {
try {
return (static_cast<typename member_function_trait<decltype(f)>::type*>(obj)->*f)(std::forward<Args>(args)...);
}
catch (std::runtime_error& e) {
//handled exception
}
return member_function_trait<decltype(f)>::ret; //<--- how to return default constructed or 'void' here ?
}

编译错误:

error C2275: 'member_function_trait<void (__cdecl MyClass::* )(void)>::ret': illegal use of this type as an expression

我不知道如何处理这个问题。我忽略了一些简单的技巧吗? (希望如此)

最佳答案

首先,您的特征不太正确,因为 ret 将是函数类型,而不是它的返回类型。你可能是这个意思:

template<class T, class R, class... A>
struct member_function_trait<R (T::*)(A...)>
{
using type = T;
using ret = R;
};

在此之后,只需创建 ret() 即可准确地提供您想要的内容:

// In DispatchImpl:
return typename member_function_trait<decltype(f)>::ret();

[Live example]

关于c++ - 从模板函数返回默认构造或无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57901919/

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