忍者ブログ

てんねんのSE備忘録

てんねんのためのSE備忘録 間違い指摘いただけると助かります また、拍手なんかしていただけると喜びます

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

C++:関数を引数に設定する

C++:関数を引数に設定する

関数を引数に設定することで
関数に汎用性が大きくなる

ということで
今回は関数を引数に設定する方法です

さっそく、Cでの例を挙げます

●例1(Cの場合)
int funcA(int a, int b,int (*funcB)(int,int)){
    
    int c = funcB(a,b);
    
    return c;
    
}

funcBには引数にint型の変数2つを取ることができ、intを返す関数が入ります

●インラインとは何??

C++ではもっとオーバーヘッドを無くす(速度を上げる)方法があるそうで
それがインライン関数みたいです
インライン=マクロみたいなものです

⇒基本的な書き方
inline int A(int x){
    return x;
}
⇒注意
コンパイル時にプリプロセッサにより全て展開されるので実体は使用分だけ存在してしまう
つまり、コンパイル後の実質的なメモリが多くなる??ってな感じだと思います

と、C++の場合に入る前にもう1つ知識がいるようでして…

●テンプレート関数(template<引数の設定>)とは??

どんな型でも1つの関数で扱えるようにする仕組みを持っているのが
テンプレート関数だそうです

template<class T>
T max(const T& a, const T& b)
{
    return ( a > b ) ? ( a ) : ( b );
}

※class = typenameでも良い

例えばmax( 100, 150 );で上記のテンプレート関数を呼び出した場合
int max(const int& a, const int& b)
{
    return ( a > b ) ? ( a ) : ( b );
}

となるみたいです
知識無さ過ぎですねw
勉強しまっす

では、C++の場合の例に移ります

●例2(C++の場合) インライン展開

template<typename STRUCT, int SIZE>
void initialize(int matrix[SIZE][SIZE])
{
    for(int row = 0; row < SIZE; ++row)
    {
        for(int col = 0; col < SIZE; ++col)
        {
            matrix[row][col] = STRUCT::generate(row, col);
        }
    }
}

struct struct_A
{
    inline static int func(int, int)
    {
        return 0;
    }
};

struct struct_B
{
    inline static int func(int row, int col)
    {
        return (row == col) ? 1 : 0;
    }
};

int main(int, char* [])
{
    int m[10][10];

    initialize<sturct_A>(m);
    initialize<sturct_B>(m);

    return 0;
}

※initializeのtemplateのSIZEを呼び出していませんが
引数に配列を入れた時点で設定されるようですね

構造体のstruct_Aとstruct_Bどちらを選択するかによって
関数の内容が変わるようになっています

●まとめ
Cの記述は楽
C++の記述は面倒だけど、プログラムの速度アップにつながる
(ただし、メモリが大きくなる)

拍手[0回]

PR

コメント

お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード Vodafone絵文字 i-mode絵文字 Ezweb絵文字

カレンダー

10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30

フリーエリア

最新CM

最新TB

プロフィール

HN:
てんねん
性別:
非公開

バーコード

ブログ内検索

P R

カウンター

忍者アナライズ