VBの「with」のような処理をC++で行うには?


しん  2006-11-07 07:17:05  No: 63509

VBで「with」という処理があるのですがC++でこれと同じようにするためにはどのように記述すればよいのでしょうか。ご回答いただければ嬉しく思います。


Blue  2006-11-07 07:51:14  No: 63510

できません。
言語使用ですからあきらめましょう。


Blue  2006-11-07 07:57:08  No: 63511

訂正)
>言語使用ですからあきらめましょう。
言語仕様ですからあきらめましょう。


Blue  2006-11-07 09:20:42  No: 63512

Belution に似たようなスレがあった。
http://forums.belution.com/ja/vc/000/321/38s.shtml


PATIO  2006-11-07 22:57:23  No: 63513

belutionのスレでも書いていますが、
C++の勉強をする時は一旦VBの知識は封印した方が良いです。
アルゴリズムとか言語によらない部分は使えますが、
言語使用に関しては全く別物です。
かえってVBの知識が邪魔になると思います。


PATIO  2006-11-07 22:58:06  No: 63514

あうあう。

「言語使用」ではなくて「言語仕様」でした。


uskz  2006-11-08 00:15:34  No: 63515

longName.longLongName.hoge = 3;
longName.longLongName.piyo = "aa";

みたいになって鬱陶しくなっているのなら,参照で短いalias付けて

{
  SomeType& st = longName.longLongName;
  st.hoge = 3;
  st.piyo = "aa";
}

って感じですかねー


uskz  2006-11-08 22:26:32  No: 63516

ちょっとあがいてみました.
これだとWITHの中でbreakとか使えませんが.

#include <string>
#include <iostream>
#include <boost/typeof/typeof.hpp> // boost sandboxとか参照
#include <boost/type_traits/add_reference.hpp>

#include BOOST_TYPEOF_INCREMENT_REGISTRATION_GROUP()

struct Hoge
{
  int a;
  std::string b;
};

BOOST_TYPEOF_REGISTER_TYPE(Hoge)

#define WITH(obj) \
  for (bool f = true; f;) \
    for (boost::add_reference<BOOST_TYPEOF(obj)>::type _ = obj; f; f = false)

int main()
{
  Hoge hoge;

  WITH(hoge)
  {
    _.a = 3;
    _.b = "test";
  }

  std::cout << hoge.a << std::endl;
  std::cout << hoge.b << std::endl;
}


PATIO  2006-11-09 00:31:09  No: 63517

そこまでして使わなくてもいいのではと言う気もしますけれど、
試みとしては面白いかも。

但し、自分のプロジェクトでこんな事をする人がいたら
やめてくれと言うでしょうね。
WITHのブロックが大きくなると可読性が落ちそうだし。


uskz  2006-11-09 01:17:45  No: 63518

>自分のプロジェクトでこんな事をする人がいたらやめてくれと言うでしょうね。

この辺はそのテクニックがどれだけ認知されているかによると思います.Boost.Foreach然り.
まあ,私はwithで可読性は上がらないと思ってますので,こんなの使いませんが(笑)


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加