boost :: function模板类

时间:2011-12-21 16:46:11

标签: c++ templates boost functor

该程序旨在创建一个库,使C ++程序员可以轻松地模拟电路。任何反馈都表示赞赏。我面临的错误让我感到困惑。

wire.h文件

template<typename S>
class wire
{
  public:
    // default constructor
    wire() : _s() {}

    // constructor with one parameter of type S
    wire(S s) : _s(&s) {}

    // converter to signal
    operator S() const { return *_s; }

    // resets the signal of the wire and return the signal
    S operator()(S s) { *_s = s; return s; }

  private:
    // pointer to signal being carried
    S *_s;
};

// functor, returns the negation of the negation of the signal of the wire as a wire
template<typename W>
struct ww_not
{
  W operator()(W w1) const { return ~w1; };
};

的main.cpp

#include <iostream>
#include <boost/function.hpp>
#include "wire.h"
typedef unsigned sig_type;
typedef wire<sig_type> wire_type;

main()
{
  sig_type s1(0x2), s2(0x3), s3(0x5), s4(0x7), s5(0xb), s6(0xc), s7(0x11);
  wire_type w1(s1), w2(s2), w3(s3), w4(s4), w5(s5), w6(s6), w7(s7);

  boost::function<wire_type (wire_type)> _not;
  //_not = &ww_not;
  // error missing template type
  _not = &ww_not<wire_type>;
  // error: expected primary-expression before ';' token
}

我已经尝试了几种不同的方式,它应该有用。

1 个答案:

答案 0 :(得分:3)

ww_not是一个需要实例化的仿函数类,而不是具有地址的函数:

_not = ww_not<wire_type>();