MS Visual Studio 4.1の明示的なキーワード
-
29-09-2019 - |
質問
私はジェネリックを使用してスマートポインタークラスを実装していますが、このクラスのユーザーに強制的に、などの構文を使用してスマートポインターを適切に構築するように強制したかったのです。
MyReference<TestCls>(mytest3))
また
MyReference<TestCls> mytest4(new TestCls());
したがって、これを防ぐために、CTORの明示的なキーワードを使用しました。
MyReference aRef = NULL;
しかし、私の制御を超えた不幸な状況のため、私は古代のMSVC ++ 4.1コンパイラを使用してコンパイルされるコードに取り組んでいます。明示的なキーワードを含めると、次のエラーが表示されます。
myreference.h(49):エラーC2501: 'explicit':断られた断層剤の欠落
myreference.h(51):エラーC2143:構文エラー:紛失 ';'前 ''
myreference.h(52):エラーC2238:先行する予期しないトークン: '
myreference.h(52):エラーC2059:構文エラー:「int constant」
私が追加するとき #define explicit
これらのエラーは消えます。これは私の側のハックでした。コンパイラにキーワードを無視するようにするためだけです。これは、Yon Olde Compilerによって明示的なものがサポートされていないことを意味すると推測しています。誰かがこれを確認できますか?
Merci Beaucoups、デニス。
解決
このサイト これについて回避策、つまり:
残念ながら、古いコンパイラは、頭痛のような「明示的」の使用をサポートしていない場合があります。時代遅れのコンパイラと一緒に仕事をしていて、C ++標準をよりよくサポートするコンパイラを取得できない場合、最良の解決策は、単一の暗黙的変換のみが行われるという事実を利用することです。与えられた値。各タイプのオブジェクトを暗黙的に作成する中間クラスを使用してこれを悪用し、メインクラスにそのクラスから暗黙的にオブジェクトを作成してもらうことができます。
class proxy
{
public:
proxy(int x) : x(x) {} ;
getValue() { return x; }
private:
int x;
};
class String
{
// this will be equivalent of explicit
String(proxy x) { /* create a string using x.getValue(); */ }
}