C++に足りないと思うもの

思いついたのをざっと列挙。


【タプルリテラル

Uniform Initialization使えばできるけど、{1, 2}じゃなくて(1, 2)と書きたい


【Boost.uBLAS】

標準で行列クラスとかほしい


【Boost.Fusion】

TupleよりFusionのほうがカッコいい


【多重ディスパッチ】

N2216 - Report on language support for Multi-Methods and Open-Methods for C++

void foo(virtual A&)
{
}


【パターンマッチング】
特殊化じゃなくて、動的にやりたい

int factorial(int n == 0) { return 1; }
int factorial(int n)      { return n * factorial(n - 1); }


【Range-baseライブラリ】
begin/endはもう飽きた

N1872 - Range Library Proposal

vector<int> v;
for_each(v|sorted, [](int x){ cout << x << endl; });


【yield、というか遅延評価】

lazy_list<int> enum_from(int start)
{
    yield start++;
}

for (int i : enum_from(0)) {
    cout << i << endl;

    if (i > 10)
        break;
}


【複数パラメータを受け取ることができるoperator[]】

struct matrix {
    int operator[](int x, int y);
};

matrix m;
int n = m[1, 2];

std::pair受け取ってUniform Initializationでそれっぽいことはできるけど。

struct matrix {
    int operator[](std::pair<int, int>&&);
};

matrix m;
int n = m[{1, 2}];


【インクルードに代わる何か】

N2316 - Modules in C++(Revision 5)

import std;

int main()
{
    std::cout << "Hello" << std::endl;
}


【ネストした名前空間の定義】

N1524 - Nested Namespace Definition Proposal

namesapce boost::lambda {
}

finallyはいらないです。(RAIIで十分)

N1394 - Some proposed extensions to C++ language

try {
}
catch (...) {
}
finally {
}
void f() try
{
}
finally
{
    cout << "end f" << endl;
}