これは今日ではちょっと一般的なアプローチのようです
auto foo(T a, K b) -> dectlype(a+b);
しかし、このコードはどうですか?
void foo(decltype(a));
そこの「a」は、あるクラスの変数の型です。お気に入り:
class SomeClass
{
public:
void foo(decltype(a));
private:
int a;
};
今、私は古いスタイルのアプローチがtypedefを使用することであることを理解しています:
typedef int IntType;
しかし、decltype はどうでしょうか。どう思いますか?
私が見ているように、これには次の欠点があります。
- 抽象インターフェースでは使用できません (型を取る "a" はありません)
- コードを読みにくくする
- ほとんどの一般的な IDE は decltyped 関数の正しい定義を生成しません
私が考えることができる単一のプロ:
- typedef を変更しなくても、型の変更に対して安全です。
Tbh、そのような decltype の使用法よりも短所の方がはるかに重要だと思いますが、私以外の意見を聞きたいです:)