昔ながらのプログラミング言語で新しい考え方を取り入れられないかを考えています。
部分適用的なことをC++で出来ないかを考えてみました。
まず、C#で試みました。
C#
1using System; 2 3class Part{ 4 int X; 5 int _add(int y){ 6 return X+y; 7 } 8 public Func<int,int>add(int x){ 9 X=x; 10 return _add; 11 } 12} 13 14class MainClass { 15 static void Main() { 16 17 Part part1=new Part(); 18 Part part2=new Part(); 19 20 Func<int,int>p1=part1.add(10); 21 Func<int,int>p2=part2.add(100); 22 23 Console.WriteLine(p1(1000)); 24 Console.WriteLine(p2(10000)); 25 } 26}
とりあえず、動作はしました。
これと同じ手法でC++でやってみました。
C++
1#include<stdio.h> 2typedef int(*t_add)(int); 3 4class Part{ 5 int X; 6 int _add(int y){ 7 return X+y; 8 } 9 public:t_add add(int x){ 10 X=x; 11 return _add; // コンパイルエラー 12 } 13}; 14 15int main(){ 16 17 Part *part1=new Part(); 18 Part *part2=new Part(); 19 20 t_add p1=part1->add(10); 21 t_add p2=part2->add(100); 22 23 printf("%d\n",p1(1000)); 24 printf("%d\n",p2(10000)); 25 26 return 0; 27}
11行目でコンパイルエラーが発生しましたが、型を合わせる方法が分かりませんでした。
うまく、型を合わせるか、それが無理なら別の方法で解決したいのですが、アドバイスをお願いします。
回答6件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。