MyUtils

View on GitHub

operator/inlineについて

operator/inline関係ないけど、単体だけだとそこまで書くことないのでまとめる。

operatorについて

オペレータ関数の作り方はこんな感じ

class TestClass
{
    int num;

public:
    //🌟+記号をオーバーロード(🌟引数は+の左辺値)
    TestClass operator+(TestClass r)
    {
        TestClass tc;
        tc.num = this->num + r.num;
        return tc;
    }
    //🌟-記号をオーバーロード(🌟引数は+の左辺値)
    TestClass operator-(TestClass r)
    {
        TestClass tc;
        tc.num = this->num - r.num;
        return tc;
    }
};

// 引数は両方ともnewで確保に必要なメモリサイズが渡される。
// 普通にmallocで確保したポインタを返すとかでOK
void *operator new(size_t size){ return malloc(size);}
void *operator new[](size_t size){ return malloc(size);}

// 確保したインスタンスのポインタが渡される
// 普通にfreeでOK
void operator delete(void *p){free(p);}
void operator delete[](void *p){free(p);}

inline関数について

#include <iostream>

inline void logger(const char *file, int line, std::string src)
{
    std::cout << file << "[" << line << "]"
              << src << std::endl;
    std::cout << __PRETTY_FUNCTION__ << "["
              << __LINE__ << "]" << std::endl;
    return;
}

#define plogger(src) logger(__PRETTY_FUNCTION__, __LINE__, src)

int main()
{
    // 🌟プリプロセッサで行数を取れる。
    //   しかし、inline展開したとはいえ関数内の行数で出力される。
    plogger("What`s"); 

    plogger("What`s2");

    return 0;
}
user@macbook Descripter % ./a.out             
int main()[16]What`s
void logger(const char *, int, std::string)[8]
int main()[18]What`s2
void logger(const char *, int, std::string)[8]