开发者

Does FC++ work with g++ 4.5.0?

开发者 https://www.devze.com 2023-02-01 15:51 出处:网络
FC++ is a library for functional programming in C++.I am using it on MinGW with gcc 4.5.0.When I use the more basic features, I have no problems.But one of the more advanced features is giving me a te

FC++ is a library for functional programming in C++. I am using it on MinGW with gcc 4.5.0. When I use the more basic features, I have no problems. But one of the more advanced features is giving me a template-related error (or maybe there's just a problem with my code...couldn't be!).

Does anybody have FC++ working with 4.5.0? See anything wrong with my code?

The link text is solidly out of date, though it shows a history of issues with gcc and template specialization. The link text isn't more up to date.

Here's my code:

#include <iostream>
#include "prelude.h"

using namespace fcpp;
using namespace std;

  struct TwoTimes  {
    template <class T>
    struct Sig : public FunType<T,T> {};

    template <class F>
    F operator() (const F& x) const { return 2*x; };
  } twoTimes;


int main(int argc, char* argv[] ) 
{
  cout << compose(twoTimes,twoTimes)(3) << endl;
  return 0;
}

The error I get is:

In file included from full.h:14:0,
             from lambda.h:38,
             from operator.h:29,
             from function.h:23,
             from reuse.h:14,
             from list.h:31,
             from prelude.h:32,
             from y.cxx:2:
smart.h: In instantiation of 'fcpp::FunctoidTraits<TwoTimes>':
prelude.h:142:74:   instantiated from 'fcpp::impl::XCompose::Sig<TwoTimes, TwoTimes>'
full.h:94:53:   instant开发者_Python百科iated from 'fcpp::Full2<fcpp::impl::XCompose>::Sig<TwoTimes, TwoTimes>'
y.cxx:18:46:   instantiated from here
smart.h:103:7: error: no type named 'Type' in 'struct   
      fcpp::impl::NeededASmartFunctoidButInsteadGot<TwoTimes, false>'
In file included from y.cxx:2:0:
prelude.h: In instantiation of 'fcpp::impl::XCompose::Sig<TwoTimes, TwoTimes>':
full.h:94:53:   instantiated from 'fcpp::Full2<fcpp::impl::XCompose>::Sig<TwoTimes, TwoTimes>'
y.cxx:18:46:   instantiated from here
prelude.h:142:74: error: 'fcpp::FunctoidTraits<TwoTimes>::max_args' is not a valid   
    template argument for type 'int' because it is a non-constant expression
In file included from lambda.h:38:0,
             from operator.h:29,
             from function.h:23,
             from reuse.h:14,
             from list.h:31,
             from prelude.h:32,
             from y.cxx:2:
full.h: In instantiation of 'fcpp::Full2<fcpp::impl::XCompose>::Sig<TwoTimes, TwoTimes>':
y.cxx:18:46:   
instantiated from here
full.h:94:53: error: no type named 'Arg1Type' in 'struct    
    fcpp::impl::XCompose::Sig<TwoTimes, TwoTimes>'
y.cxx: In function 'int main(int, char**)':
y.cxx:18:46: error: no match for call to '(fcpp::Compose) (TwoTimes&, TwoTimes&)'


Well .... the links you refer to are seven years old. In dog and compiler years, that is a good lifetime.

If you want functional programming with (current) C++ compilers, maybe some of the Boost libraries may be of interest?


If the answer is still needed to this, the struct TwoTimes needs to be wrapped to work with FC++. I have worked a lot with FC++ over several years. The best thing I can do is point to here on the C2 wiki where I have discussed this:

http://c2.com/cgi/wiki?FunctoidsInCpp

Any posting there I will see.

0

精彩评论

暂无评论...
验证码 换一张
取 消