C++でクラス内の関数を省略して使う方法

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

C++でクラス内の関数を省略して使う方法

#1

投稿記事 by 林檎 » 9年前

staticで定義しているクラス内の関数を省略して表示したいです。

その為に定義文でマクロを組んでいるのですが、クラスよりも先に書いてしまうと、
そちらも置き換えてしまうのでコンパイルエラーがでてしまいます。

その為、後に無理やり書いているのですが、
using、namespaceなどで書かないで同じように実装する方法はあるのでしょうか。

コード:

class hoge{
public:
	static void func1();
};

void hoge::func1(){

}

int main(){
	hoge::func1();  // これを下記のように書きたいです。
	↓
	func1();
}

#define func1 hoge::func1

#define func1 hoge::func書く位置によってはダメ


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

Re: C++でクラス内の関数を省略して使う方法

#2

投稿記事 by h2so5 » 9年前

コード:

class hoge{
public:
    static void func1();
};
 
void hoge::func1(){
 
}

void (*func1)() = hoge::func1;
 
int main(){
    func1();
}

Poco
記事: 161
登録日時: 13年前

Re: C++でクラス内の関数を省略して使う方法

#3

投稿記事 by Poco » 9年前

関数にお友達申請させるとか。

コード:

class hoge{
	friend void func1();
private:
	static int a;
};

int hoge::a = 0;

void func1()
{
	hoge::a++;
}


int main()
{
	func1();
}

林檎

Re: C++でクラス内の関数を省略して使う方法

#4

投稿記事 by 林檎 » 9年前

こんなに早く回答を頂けるとは・・・。
助かります(汗)
何冊か本を読んでたのですがこのような説明が見当たらなくて。。。
質問ばかりで申し訳御座いません。

■h2so5様
なるほど・・・。ポインタを渡してやればできるのですか・・・。
コチラの場合、引数がある関数の場合どうすればよいのでしょうか。
この方法の名前?みたいなのがあれば教えて頂けないでしょうか。

■Poco様
friendなんて修飾子があるのですね。
全く知りませんでした。ありがとうございます!

調べてみるとこちらだと、そのクラスの関数とはちょっと違う?みたいになってしまうのと、staticをつけては行けないのですね。
今回はh2so5様の方法で実装し直してみようと思います。

始めて聞いた単語なので勉強になりました!!

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

Re: C++でクラス内の関数を省略して使う方法

#5

投稿記事 by h2so5 » 9年前

引数がある場合は、

コード:

class hoge{
public:
    static void func1(int a, int b);
};

void (*func1)(int, int) = hoge::func1;
のように書きます。機能としての名前は「関数ポインタ」です。

林檎

Re: C++でクラス内の関数を省略して使う方法

#6

投稿記事 by 林檎 » 9年前

ありがとうございます!
問題なく動きました。助かりました(汗)
名称までありがとうございます。

閉鎖

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