No Such Blog or Diary

«Prev || 1 | 2 | 3 |...| 1008 | 1009 | 1010 |...| 1325 | 1326 | 1327 || Next»

化物語を履修中

「なでこスネイク」が「なでこストライク」に補完されて仕方がない.「ネ」は「ラ」と「ト」を縦に並べて書くのだから,文字の構成要素としては等価であって補完自体は間違いじゃない気もするけれど.まあ,ググるとストライクでもそれなりに引っかかるので何らかの共通意識があるに違いない.

国際会議の論文のsubmitの登録をしようとした → submitサイトの新しいアカウントを作った → パスワードの書かれたメールが送られてくるみたい → スパム対策に初めてメールを送信してくるサーバに対して一時的に配送拒否という… 暫くメール来ない&論文の登録もできない!

これ締め切りぎりぎりに登録作業してたらアウトだったよなぁ.アブネェ.

….その後の登録成功のメールも一時間以上遅れてきたなぁ.こりゃただ単にサーバが重いってだけか?

λ式を返す関数を作りたかったのだけど

あー,New wording for C++0x Lambdas (rev. 2) (N2927) にλ式はdecltypeの引数にはなれないと書いてあった.残念.

In addition, this rewrite adds the restriction that lambda expressions cannot be used in the operand of a sizeof operator, alignof operator, or decltype specifier.That restriction—suggested by Doug Gregor and John Spicer—avoids severe implementation difficulties with template argument deduction.

ということは,λ式を返す関数は戻り値の型にautoと書けないのか.λ式の正確な型の書き方を知る必要があるな.できるかどうかすら分からないけど.

うーむ,decltypeに直接λ式を入れるだけでなく,部分式にすらλ引きが許されないのか….しかもN2927とかN2550とか読む限りではλ式が変換されるクロージャオブジェクトにはユニークだけど名無しの型がつくそうで….やっぱλ式を返すにはstd::functionに突っ込むしかないのかな(何の問題もないのだけど何か負けた気分).

gcc 4.5.0 (experimental) でラムダ式を返す関数を作ろうとしたが…

下のようにdecltypeの中にλ式を書いたらコンパイル通らなかった.うーん,expressionなら何でもよいと思ったのだが何か間違っただろうか?

#include <iostream>
 
template <typename T>
auto func(T i) -> decltype(i) { return i; }
 
template <typename T>
auto func1(T i) -> decltype([=](int j){ return i+j; })
 { return [=](int j){ return i+j; }; }
 
int main(int argc, char *argv[])
{
        func(1);
        func1(1);
        return 0;
}

上側のfuncの定義は通る.でも下のfunc1の定義が通らない.expected primary-expression before ')' token (λ式の後の)の手前に式が必要)とか言われる.

そしてλ式とテンプレートの同時使用の仕方が分からない.ポリモーフィックなλ式は作れるのか?

gcc 4.5.0 (experimental) でラムダ式をデマングルしてみた

#include <iostream>
#include <typeinfo>
#include <cxxabi.h>
 
int main(int argc, char *argv[])
{
  auto f = [](int a) { return (a + 1) ^ 7;};
  int status;
  std::cout << abi::__cxa_demangle((typeid (f)).name(), 0, 0, &status) << std::endl;
  auto g = [](int a, float b) { return ((a + 1) ^ 7) + b;};
  std::cout << abi::__cxa_demangle((typeid (g)).name(), 0, 0, &status) << std::endl;
  auto h = [](int a, float b) { return ((a + 1) ^ 7) + b;};
  std::cout << abi::__cxa_demangle((typeid (h)).name(), 0, 0, &status) << std::endl;
  std::cout << abi::__cxa_demangle((typeid (h(1,1.0f))).name(), 0, 0, &status) << std::endl;
  return 0;
}

を実行して

main::{lambda(int)#1}
main::{lambda(int, float)#2}
main::{lambda(int, float)#3}
float

が出力された.

とりあえず,宣言された場所+lambdaに引数が連なって,ついでに何番目に宣言されたかがくっつくと.なるほど.

来月の買い物予定:N-02B

いい加減今持ってる携帯(N905i)がボロボロなので,来月出る予定のN-02Bの購入しようかなと.キャッチコピーの「瞬撮」とかどうでもいいんだけど,ニューロポインターと回転二軸折り畳みの筐体にWLANとタッチパネルがつくという理想状態になってくれたのは有難い.あとは実機で動きがもっさりしなければ購入確定なのだが…

«Prev || 1 | 2 | 3 |...| 1008 | 1009 | 1010 |...| 1325 | 1326 | 1327 || Next»
Search
Feeds

Page Top