Можно ли создавать и использовать собственные методы расширения System::String^ в C++/CLI?

Я попытался сделать расширение встроенного класса String с помощью C++/CLI и безуспешно использовать его из C++/CLI.

Вот самое простое, что я могу свести к следующему:

[System::Runtime::CompilerServices::Extension]
public ref class MyStringExtensions abstract sealed {
    public:        
        [System::Runtime::CompilerServices::Extension]
        static bool TestMethod(System::String^ str) { return false; }
};

Теперь, когда я пытаюсь использовать это в другом коде C++/CLI, я получаю сообщение компилятора, указывающее, что TestMethod не является методом String.

String^ foo = gcnew ...
...
blah = foo->TestMethod();  // compile-error

Любые идеи?


person jglouie    schedule 06.03.2012    source источник
comment
возможный дубликат функций расширения C++? и stackoverflow.com /questions/2919715/ и stackoverflow.com/questions/ 5463009/extension-methods-in-c   -  person Ben Voigt    schedule 07.03.2012


Ответы (1)


C++ не имеет методов расширения.

Но у него есть ADL (поиск в зависимости от аргумента, также известный как поиск Кенига), который возможно даже красивее.

person Ben Voigt    schedule 06.03.2012
comment
Итак, этот вопрос stackoverflow.com/questions/6012578/ недействителен? - person jglouie; 07.03.2012
comment
Нет, это другое. Этот охватывает определение методов расширения в C++/CLI, а не вызывает их из C++/CLI. C++/CLI ничего не знает о методах расширения (вы все еще можете использовать обычный синтаксис статического метода), и идиома C++ заключается в использовании вместо этого перегруженной свободной функции. - person Ben Voigt; 07.03.2012