「@"hogehoge" + @"piyopiyo"」する方法です。
Objective-C++使っているので、拡張子をmain.mmみたいな感じにしてあげて下さい。
intとfloatにも対応しているので、「@"fugafuga" + 1 + 2 + 3.14f」で@"fugafuga123.14"になります。
MRCなので、ARCで使う場合はretainとかreleaseとかを適宜端折っちゃって下さい。
おかしいトコの指摘や、intやfloat以外に対応したコードとかを、
gistにpull request頂けたりすると、泣いて喜びますお(*´∀`)
main.mm
//
// main.mm
// ObjCOperatorSample
//
// Created by oden on 13/03/07.
// Copyright (c) 2013年 JITAKUKEIBI INC. All rights reserved.
//
#import <Foundation/Foundation.h>
class ID
{
private:
id object = nil;
public:
ID(const id object = [[[NSObject alloc] init] autorelease])
{
this->object = [object retain];
}
~ID()
{
[this->object release];
this->object = nil;
}
operator id()
{
return this->object;
}
ID operator+(const id object)
{
return [[this->object description] stringByAppendingFormat:@"%@", object];
}
ID operator+(const int i)
{
return [[this->object description] stringByAppendingFormat:@"%@", @(i)];
}
ID operator+(const float f)
{
return [[this->object description] stringByAppendingFormat:@"%@", @(f)];
}
ID& operator+=(ID source)
{
[this->object autorelease];
this->object = [[*this stringByAppendingFormat:@"%@", (id)source] retain];
return *this;
}
};
int main(int argc, const char * argv[])
{
@autoreleasepool
{
// コピーコンストラクタ
ID hoge = @"a";
// operator+
hoge = hoge + @"b";
// operator+=
hoge += @"c";
// 複数のオブジェクトを連結する場合は、最初のオブジェクトをID型にキャストする
hoge += (ID)@"d" + @"efg";
// NSNumberやプリミティブ型にも対応可能
hoge += (ID)@(1) + 2 + 3.14f;
// 暗黙の型変換
id piyo = hoge;
// 明示的型変換
NSLog(@"%@", (id)hoge);
// 結果:abcdef123.14
// 普通に出力
NSLog(@"%@", piyo);
// 結果:abcdef123.14
}
return 0;
}