C++11
はuser-defined literalsです。私はちょうどそれらと一緒に遊んで始めました。それは私が定義する1つのリテラルにすべてSI multipliersを自動的に追加することが可能かどうか疑問に思いましたか?例えば単一のユーザー定義リテラルに基づいてリテラル定義を自動的に追加する方法はありますか?
、IはLength
いくつかUnits
ベースクラスのサブクラスであり、Iは(boost operatorsと同じ趣旨で)追加SI乗算器を自動的するメカニズムを持っていると思い
Length operator "" _m(long double m) {
return Length(m); // Length in meters
}
を定義する場合返すすべてのリテラルのLength
:
// these are added automatically when defining the literal "_m":
// Length in:
Length operator "" _Ym(long double Ym); // Yottameters
Length operator "" _Zm(long double Zm); // Zetameters
... // ...
... // ...
Length operator "" _km(long double km); // kilometers
Length operator "" _mm(long double mm); // millimeters
... // ...
... // ...
Length operator "" _zm(long double zm); // zeptometers
Length operator "" _ym(long double ym); // yoctometers
は、私の知る限りは、おそらくいくつかのマクロの魔法とは別に、見ることができるように、このAを実行する方法はありませんすべてのユーザ定義リテラルが明示的なの定義を必要とするためです。
..私は何か見落としていますか?
なぜテンプレートと? –
@Adriano:example? –
と同じです:http://www.codeproject.com/Articles/447922/Application-of-Cplusplus11-User-Defined-Literals-t(測定単位の部分を省略し、乗数のみを保持できる場合は...その点を逃した、あなたは正しいかもしれません_macro magic_) –