Работает ли FC ++ с g ++ 4.5.0? - PullRequest
       1

Работает ли FC ++ с g ++ 4.5.0?

2 голосов
/ 30 декабря 2010

FC ++ - это библиотека для функционального программирования на C ++. Я использую его на MinGW с GCC 4.5.0. Когда я использую более основные функции, у меня нет проблем. Но одна из более продвинутых функций дает мне ошибку, связанную с шаблоном (или, может быть, просто проблема с моим кодом ... не может быть!)

У кого-нибудь есть FC ++, работающий с 4.5.0? Видите что-нибудь не так с моим кодом?

Текст ссылки устарел, хотя и показывает историю проблем с gcc и специализацией шаблонов. текст ссылки не более актуален.

Вот мой код:

#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;
}

Я получаю ошибку:

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:   instantiated 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&)'

Ответы [ 2 ]

1 голос
/ 23 июля 2013

Если ответ все еще необходим для этого, struct TwoTimes должна быть упакована для работы с FC ++. Я много работал с FC ++ на протяжении нескольких лет. Лучшее, что я могу сделать, это указать здесь на вики-странице C2, где я обсуждал это:

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

Любую публикацию там я увижу.

1 голос
/ 30 декабря 2010

Ну .... ссылкам, на которые вы ссылаетесь, семь лет. В годы собак и компиляторов это хорошая жизнь.

Если вам нужно функциональное программирование с (текущими) компиляторами C ++, может быть, вас могут заинтересовать некоторые библиотеки Boost ?

...