ページ 1 / 1
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 林檎
ありがとうございます!
問題なく動きました。助かりました(汗)
名称までありがとうございます。