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]