gpt4 book ai didi

c++ - STL:卷积两个 unary_function 参数

转载 作者:太空宇宙 更新时间:2023-11-04 14:40:19 25 4
gpt4 key购买 nike

使用 VS2005 在 Windows 上工作并努力理解我收到的错误消息。如果之前有人问过这个问题,我很抱歉。我找不到它。

我正在测试的类:

#include <functional>
using std::unary_function;

template<typename F, typename G>
struct UnaryConvolution : unary_function<typename G::argument_type,typename F::result_type>{
UnaryConvolution(const F &_f, const G &_g) : m_F(_f), m_G(_g){}

result_type operator()(const argument_type &_arg){
return m_F( m_G( _arg ) );
}

F m_F;
G m_G;
};

我写的单元测试:

using std::bind2nd;
using std::equal_to;
using std::less;

bool unaryConvolution_test(){
UnaryConvolution obj(bind2nd( equal_to<bool>(), true ), bind2nd( less<int>(), 5 ));

return obj( 3 );
}

和我遇到的错误:

  1. 错误 C2955:“UnaryConvolution”:类模板的使用需要模板参数列表
  2. 错误 C3848:类型为“UnaryConvolution”的表达式将丢失一些 const-volatile 限定符以调用“_Result UnaryConvolution::operator ()(const _Arg &)”
  3. 错误 C2514:“UnaryConvolution”:类没有构造函数

即使添加行 int val = 3 然后传递 val 也没有效果。 (顺便说一句,项目禁止使用 Boost 或任何 3rd 方库。不要问,我尽量不要。)

最佳答案

UnaryConvolution 是一个类模板,而不是一个类。您需要指定用于实例化模板的模板参数。例如,

UnaryConvolution<
function<bool(bool)>,
function<bool(int)>
> obj(bind2nd( equal_to<bool>(), true ), bind2nd( less<int>(), 5 ));

(我使用了 function,您可以从 Boost、C++ TR1 或 C++0x 中获取它,来代替 bind2nd 的实际返回类型,这不是那么简单。如果您无法访问 function 的某些实现,那么您需要找出 bind2nd 的返回类型)

关于c++ - STL:卷积两个 unary_function 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3669034/

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