gpt4 book ai didi

c++ - 在类定义中获取可调用的输入/输出类型

转载 作者:行者123 更新时间:2023-11-30 05:21:26 25 4
gpt4 key购买 nike

我有以下问题:

template< typename Func >
class A
{
public:
A( Func f ) : _f( f ) {}

// ...

template< typename T_in = /*input type of _f */, typename T_out = /*output type of _f */ >
std::vector<T_out> operator()( const std::vector<T_in>& input)
{
std::vector<T_out> res( input.size() );

for( size_t i = 0 ; i < input.size() ; ++i )
res[ i ] = _f( input[ i ] );

return res;
}

private:
Func _f;
// ...

};

template< typename Func >
A<Func> A_wrapper( Func f )
{
return A<Func>( f );
}

int main()
{
// example for f(x) = x*x
std::vector<float> input = { /* ... */ };

auto f = []( float in ){ return in*in; };
auto map_square = A_wrapper( f );

auto res = map_square( input );

return 0;
}

正如您在上面看到的,我尝试实现一个类 A,其函数 operator() 将函数 _f 映射到每个元素输入 vector input

我的问题如下:我希望输入 vector input 的元素具有 _f 的输入类型(即 T_in ) 和输出 vector 的元素为 _f 的输出类型(即 T_out),但没有显式传递 _f 的输入/输出类型到类 A,我用于类型推导的函数 A_wrapper 和/或函数 operator()(由于更好的可读性代码)。有谁知道如何在编译时自动推导出 _f 的输入/输出类型?

非常感谢。

顺便说一句:这里的问题与我之前的帖子有关 Get input/output type of callable

最佳答案

Same question , same answer : 你可以推断出 T_in来自 input vector 和 T_out使用 std::result_of_t

#include <vector>
#include <functional>

template< typename Func >
class A
{
public:
A( Func f ) : _f( f ) {}

// ...

template< typename T_in,
typename T_out = std::result_of_t<Func(T_in)>>
std::vector<T_out> operator()( const std::vector<T_in> & input)
{
std::vector<T_out> res( input.size() );

for( size_t i = 0 ; i < input.size() ; ++i )
res[ i ] = _f( input[ i ] );

return res;
}

private:
Func _f;
// ...

};

template< typename Func >
A<Func> A_wrapper( Func f )
{
return A<Func>( f );
}

int main()
{
// example for f(x) = x*x
std::vector<float> input = { /* ... */ };

auto f = []( float in ){ return in*in; };
auto map_square = A_wrapper( f );

auto res = map_square( input );

return 0;
}

使用 typename std::result_of<Func(T_in)>::type而不是 std::result_of_t<Func(T_in)>应该也适用于 C++11,而不仅仅是 C++14。

关于c++ - 在类定义中获取可调用的输入/输出类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40110248/

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