meryngii.neta

今日も新たな"ネタ"を求めて。

2008-10-01から1ヶ月間の記事一覧

typedefのtypename

C++

このコードはVC++8.0でエラー(警告はC4346)になる。 template <typename T> class A { typedef std::vector<T>::iterator type; // エラー }; テンプレート引数が関わると、型メンバを指定するのにこんな風にtypenameが必要なときがある。 template <typename T> class A { typedef ty</typename></t></typename>…

静的メンバは面倒くさい

C++

クラステンプレート内で宣言した静的メンバも、普通のクラスと同様の定義をヘッダに書かないとならない。これを抜かすと大量のリンクエラーになってしまう。 template <class T> struct A { static T value; }; template <class T> T A<T>::value; // これ 整合性のために必要なの</t></class></class>…

メンバ関数テンプレートで

C++

メンバ関数テンプレートをテンプレートの中で使おうとすると、templateキーワードが必要なときがある。 #include <iostream> #include <boost/tuple/tuple.hpp> template <class T> class A { public: void f() { x.template get<0>(); // ここ } private: boost::tuple<int, double, char> x; }; int main() { A<float> a; a.f();</float></int,></class></boost/tuple/tuple.hpp></iostream>…

implicit_cast

C++

暗黙のキャストを明示的に行いたい場合がある。 http://groups.google.com/group/comp.lang.c++.moderated/browse_frm/thread/048fb906e8641f4c/ 例えば変換演算子を呼び出したいときなどは、 struct A { void f() { } }; struct B { operator A() { return …

クラステンプレート名は型名

C++

クラステンプレートの中で自分のテンプレートを使うとき、テンプレート引数を省略することができる。 私はつい数か月前までこの仕様を知らなかった。 template <class T> struct A { static void f(A<T>); static void g(A); }; 一つ目のfはAをテンプレートとして扱い、</t></class>…

例の入門書の発売日

C++

http://www.research.att.com/~bs/programming.html To appear November 2008. http://www.amazon.co.jp/Programming-Principles-Practice-Using-C/dp/0321543726 出版社: Addison-Wesley Professional; 1版 (2008/12/5) http://www.amazon.com/Programming-…

属性(attribute)

N2798には属性(attribute)に関する記述が追加されています。誰も解説していないようなので簡単な紹介を書きます。 属性は型、変数、名前、ブロック、翻訳単位に情報を付加するもので、 [[attribute]] のように、ブラケット二つで囲まれた中に記述します。 C#…

ストリームとコンセプト

ストリームとコンセプトを組み合わせてみた。 #include <iostream> #include <concepts> auto concept HasShowing<typename T> { requires std::HasLeftShift<std::ostream&, T>; } template <HasShowing T> void show(T x) { std::cout << x; } int main() { show('A'); show("abc"); //show(123); // ambiguous //show(3.14)</hasshowing></std::ostream&,></typename></concepts></iostream>…

vector

C++

vectorって特殊化されてたのか…。知らなかった。 namespace std { template <class Allocator> class vector<bool, Allocator> { /* ... */ }; } 使うなと言っている人もいるようだ。(Tips.68) http://www.sun-inet.or.jp/~yaneurao/intensive/tips2.html 特殊化されている割にはビット列とし</bool,></class>…

10月分

最新のドラフトが出たようです。 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/#mailing2008-10 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2798.pdf コンセプトが追加されたようです。これから読み始めます。

=nullptr;

nullptrが導入されれば純粋仮想関数がこんな風に書けるのかと思っていたのだけれども、 virtual void func() = nullptr; 現在のドラフトにはこんな記述はなかった。実際にvtblにヌルポインタを置くわけじゃないのは分かるけど、=0;ってやっぱ気持ち悪いなあ……

ABI

C++

新鮮なネタではないけれども、そのうち書こうと思っていたので… http://www.hyuki.com/yukiwiki/wiki.cgi?WhyINoLongerLikeOrUseCPlusPlus この文章では、C++のうんざりなところとして「生産性が低い」ことと「ABIがない」ことが挙げられている。 性能を意識…

std::Trueの実験

concept std::Trueの実験にと思ってコードを書いてみたのだけれども、ConceptGCCが14行目でinternal compiler errorを吐く。 #include <iostream> #include <concepts> template <class T> requires std::True<(sizeof(T) < 4)> void f(T x) { std::cout << "a"; } template <class T> requires std</class></class></concepts></iostream>…