C# имеет общие типы функций, таких как Action<T>
или Func<T,U,V,...>
C Действие # стиль <T>, Func <T,T>, и т.д. в C++ 0x
С появлением C++ 0x и возможность иметь шаблон TYPEDEF-х и VARIADIC параметров шаблона , похоже, это должно быть возможно.
Очевидное решение мне было бы это:
template <typename T>
using Action<T> = void (*)(T);
однако это не приспосабливает для функторов или C++ 0x лямбды, и кроме того, не компилирует с ошибкой «expected unqualified-id before 'using'
»
Моя следующая попытка была, возможно, использовать повышение :: функции:
template <typename T>
using Action<T> = boost::function<void (T)>;
Это не компилируется либо, по той же причине.
Моя только другая идея была бы STL аргументы шаблона стиля:
template <typename T, typename Action>
void foo(T value, Action f) {
f(value);
}
Но это не дает сильно типизированных решение, и имеет значение только внутри шаблонных функций.
Я сейчас первый, кто признает, что я не C++ wiz, я предпочитаю думать, что я есть, поэтому очень возможно, что есть явное решение, которое я не вижу.
Возможно ли иметь общие типы функций C# в C++?
Нет, это невозможно. Не совсем. Это разные языки. Вопрос в том, что самое близкое приближение, * на основе ваших потребностей *. Вам нужно стирать стили, поэтому каждый функтор с одной и той же подписью выглядит как тот же тип? Если это так, вам придется прыгать через некоторые обручи и терять эффективность. И часто это не стоит, потому что из-за различий между шаблонами и дженериками это часто не * необходимо *. Часто, но не всегда. Что вам нужно, точно? Помимо слепо попытки подражать C# в C++ – jalf