ページ 11

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

Posted: 2014年12月28日(日) 21:27
by 林檎
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書く位置によってはダメ


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

Posted: 2014年12月28日(日) 21:49
by h2so5

コード:

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

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

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

Posted: 2014年12月28日(日) 22:17
by Poco
関数にお友達申請させるとか。

コード:

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

int hoge::a = 0;

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


int main()
{
	func1();
}

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

Posted: 2014年12月28日(日) 22:49
by 林檎
こんなに早く回答を頂けるとは・・・。
助かります(汗)
何冊か本を読んでたのですがこのような説明が見当たらなくて。。。
質問ばかりで申し訳御座いません。

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

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

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

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

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

Posted: 2014年12月28日(日) 23:47
by h2so5
引数がある場合は、

コード:

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

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

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

Posted: 2014年12月29日(月) 00:06
by 林檎
ありがとうございます!
問題なく動きました。助かりました(汗)
名称までありがとうございます。