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 |
#include <string> using namespace std; class Hoge { public: string & GetName() { return this->name; } const string & GetName() const { return this->name; } private: string name; }; int main(int argc, char* argv[]) { Hoge* p = new Hoge; p->GetName() = "name"; const Hoge* cp = new Hoge; // cp->GetName() = "name"; // error return 0; } |
ここでGetNameの実装をひとつにしたい。
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 |
#include <string> using namespace std; class Hoge { public: string & GetName() { return const_cast<string&>(static_cast<const Hoge*>(this)->GetName()); } const string & GetName() const { return this->name; } private: string name; }; int main(int argc, char* argv[]) { Hoge* p = new Hoge; p->GetName() = "name"; const Hoge* cp = new Hoge; // cp->GetName() = "name"; // error const string& cn = cp->GetName(); return 0; } |
ソースはツーチャネルとhttp://stackoverflow.com/questions/4589622/simplifying-const-overloading