忍者ブログ

どっかのゆとりのチラシの裏

plasma_effectのメモ帳的ブログのようなsomething

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

C++2zでは動的関数生成が追加される

C++2zでは文字列から関数オブジェクトを生成されるtemplate関数compilingがfunctionalヘッダに追加される。std名前空間における宣言は以下のとおりだ。
template<class FunT, std::size_t Alignment, class ForwardIterator>function<FunT>compiling(ForwardIterator first, ForwardIterator last);
使い方は以下のとおりだ。

#include<functional>
#include<iostream>
#include<string>

int main()
{
std::string str="int add(int n,int m){return n + m;}";
auto func = std::compiling<int(int, int), 8>(str.begin(), str.end());
std::cout<< func(1, 2) <<std::endl;
}



FunTは返り値のstd::functionの型を指定し、Alignmentはその関数で確保される最大のメモリ容量を指定する。
ここで注意したいのはcompilingでは以下の機能しか使えない。すなわち
・組み込み型の変数定義
・組み込み型の演算子
・if, for, while文
・return文
関数呼び出しやユーザー定義型が使えないことには要注意だ。
また文字列が不合理な場合以下の様な例外が投げられる。複数の例外に当たる場合上のものが優先される。
・文法的に意味を成さない(typedefや関数が使われている場合含む)→std::bad_function_parsing
・返り値がFuncTで指定したものと合わない→std::bad_function_type
・Alignmentで指定した以上のメモリを必要とする→std::memory_over_exception
実行時に文字列を与えてそこから関数を生成することも可能となる。また将来的にはcompilingの文鳥言語版compiling_bunchoも導入される予定だ。
PR

コメント

お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字

カレンダー

08 2017/09 10
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

フリーエリア

最新CM

[02/12 kariya_mitsuru]
[10/14 どっかの京大生o]
[10/04 どっかのZ会生y]
[07/31 どっかのZ会生y]
[07/31 GNR]

プロフィール

HN:
plasma_effect
性別:
非公開

バーコード

ブログ内検索

最古記事

(06/08)
(06/18)
(06/21)

P R