template < typename A, template B >
decltype(A+B) func(A a, B b)
{ return a + b ; }
・auto
これは、型をよきように計らってくれる。たとえば関数の戻り値などは、コンパイル時に型が決まっているので、容易に推測できる。
std::vector< std::list< std::string > > v ;
auto iter = v.begin() ;
ここまでを踏まえての疑問、これは許されるのだろうか。当然許されるべきであると考えているのだが。
auto ret = func() ;
std::vector< decltype(ret) > v ;
v.push_back(ret) ;
・concept
これについては、ConceptC++のチュートリアルが、非常に分かりやすかった。いままでconceptというと、単にテンプレートがらみのコンパイルエラーが読みやすくなるだけかと思ったが、Concept mapの強力さに驚いた。
・rvalue reference
戻り値の型が、vector< int >な関数を、気軽に書ける機能。一時的な変数は、どうせすぐに死ぬのだから、内部のポインタを移してもかまわない。ポインタを移すだけならば、大量のコピーをするより早くなる。&&と、アンパサンドを二つ記述することで表現するらしい。サンプルコードは、実際に対応したコンパイラで試してからでないと、書けそうにない。
C++はどうなってしまうのだろう。ひとつ気になることがある。まともな日本語の参考書はでるのだろうか。現状で、まともにテンプレートについて学べる日本語の参考書を知らない。Modern C++ Designは、もはやModernではなくなっているし。Bjarne Stroustrupの書いた、枕代わりになる本の邦訳ならば書いてあるのかもしれないが、まえにちらと読んだ限りでは、ただでさえ読みにくい文章が、奇妙極まりない日本語に訳されていて、半ば睡眠薬となっていた気がする。
No comments:
Post a Comment