如何避免在函数定义时重复长后缀返回类型
How to avoid repeating long suffix return types at function definition?
有什么方法可以在函数声明中编写像这样复杂的返回类型吗?
template<typename Xa_t, typename Ya_t, typename Xb_t>
auto interpolate(const Func<Xa_t, Ya_t> & f, const std::vector<Xb_t> & vec) ->
Func<std::common_type_t<Xa_t, Xb_t>,
std::conditional_t<std::is_floating_point<Ya_t>::value,
Ya_t,
float
>
>;
如果我想在函数声明后再定义它,我必须把返回类型也粘贴在那里,这样在整个代码中创建了很多冗余。
我对c++11和c++14都持开放态度。(MSVC首选)
我想类似的结果可以实现与预处理器宏,不知道如何做到这一点,虽然。
假设c++ 11,一个解决方法是使用别名模板,例如在您的案例中:
template<typename Xa_t, typename Ya_t, typename Xb_t>
using interpolate_return_type = Func<
std::common_type_t<Xa_t, Xb_t>,
std::conditional_t<std::is_floating_point<Ya_t>::value,
Ya_t,
float
>
>;
那么你可以在声明和定义中使用这个别名模板:
template<typename Xa_t, typename Ya_t, typename Xb_t>
interpolate_return_type<Xa_t, Ya_t, Xb_t> interpolate(const Func<Xa_t, Ya_t> & f, const std::vector<Xb_t> & vec);
/* ... stuff ...*/
template<typename Xa_t, typename Ya_t, typename Xb_t>
interpolate_return_type<Xa_t, Ya_t, Xb_t>
interpolate(const Func<Xa_t, Ya_t> & f, const std::vector<Xb_t> & vec) {
/* more stuff */
}
相关文章:
- 如何获取std::result_of函数的返回类型
- 奇怪的结构&GCC&clang(void*返回类型)
- 如何建立使用模板函数的lambda函数的尾部返回类型
- 为什么与常规GCC不同,即使有"学究性错误",MinGW-GCC也能容忍丢失的返回类型
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 函数作为模板参数,是否对返回类型强制约束
- C++中函数的向量返回类型引发错误
- 检查函数返回类型是否与STL容器类型值相同
- 为什么返回类型中需要typename?C++
- <Windows>为什么 std::thread::native_handle 返回类型为"long long unsigned int"的值,而不是 void*(又名 HANDLE)?
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- 为什么 c++(g++) 不允许模板返回类型和函数名称之间有空格?
- 为什么返回类型的'const'限定符对标有 __forceinline/内联的函数没有影响?
- 推导 std::vector::back() 的返回类型
- 在 c++ 中将函数返回类型指定为模板参数
- 使用 SWIG 更改生成的 CS 函数中的返回类型
- QtQuick - qml:28:错误:未知方法返回类型:自定义类型
- 后缀自增运算符的常量返回类型
- 如何避免在函数定义时重复长后缀返回类型