可変長引数をとってスペースで区切り出力ストリームへ

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
tenfo

可変長引数をとってスペースで区切り出力ストリームへ

#1

投稿記事 by tenfo » 6年前

defineマクロ

コード:

#DISP ???
または関数オブジェクト

コード:

class DISP {
public:
    void operator(???){ ??? }
};   
で、

コード:

int main(){
    string s = "str";
    int i = 3;
    char c = 'c';
    DISP(cout,s,i,c); // cout << s << " " << i << " " << c << endl;
    return 0;
}
のように引数の型と数に関係なく、間にスペースを入れながら出力するものを作るにはどうすればよいでしょうか?
型が違うため私にはうまくできません…

KORYUOH
記事: 44
登録日時: 7年前

Re: 可変長引数をとってスペースで区切り出力ストリームへ

#2

投稿記事 by KORYUOH » 6年前

型に関してはtemplateを使えばいいと思います。
可変引数については
stdarg.hを使えば実現可能でしょう。
C言語を使うと自分の足を誤って撃ち抜いてしまうことがある。 C++を使えばそのような間違いを犯しにくくなる。しかし、やってしまったときには足全体が無くなる。

アバター
h2so5
副管理人
記事: 2212
登録日時: 9年前
住所: 東京
連絡を取る:

Re: 可変長引数をとってスペースで区切り出力ストリームへ

#3

投稿記事 by h2so5 » 6年前

屁理屈みたいなコードですが面白そうだったのでマクロとtemplateのみで実装してみました。
良い子は真似しないように。

コード:

#include <iostream>
#include <string>
 
using namespace std;
 
#define DISP ~
 
template <class T>
ostream &operator,(ostream& ost, const T& value) {
  return ost << value << " ";
}

ostream &operator~(ostream& ost) {
  return ost << endl;
}
 
int main() {
  string s = "str";
  int i = 3;
  char c = 'c';
  DISP(cout,s,i,c); // cout << s << " " << i << " " << c << endl;
  return 0;
}


閉鎖

“C言語何でも質問掲示板” へ戻る