FC++ 吗?与 g++ 合作4.5.0?

发布于 2024-10-09 10:55:52 字数 2639 浏览 1 评论 0原文

FC++ 是一个用于 C++ 函数式编程的库。我在 MinGW 上使用 gcc 4.5.0。当我使用更基本的功能时,没有任何问题。但更高级的功能之一是给我一个与模板相关的错误(或者可能只是我的代码有问题......不可能!)。

有人有可以使用 4.5.0 的 FC++ 吗?看到我的代码有什么问题吗?

链接文本已完全退出最新的,尽管它显示了 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&)'

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

も星光 2024-10-16 10:55:52

嗯...您引用的链接已有七年历史了。在狗和编译器的时代,那是美好的一生。

如果您想使用(当前)C++ 编译器进行函数式编程,也许某些 Boost 库可能感兴趣?

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?

可是我不能没有你 2024-10-16 10:55:52

如果仍然需要答案,则需要包装 struct TwoTimes 才能与 FC++ 一起使用。多年来我与 FC++ 进行了大量合作。我能做的最好的事情就是指向 C2 wiki 上的这里,我在那里讨论了这个:

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

我会看到那里的任何帖子。

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文