Я привык к шаблонам C++ и программированию для переносимого кода (MSVC, XCode...). В упрощенном виде я написал функцию
template <typename T, void (*FUNC)(T, T)>
void ApplyFuncOnBuffer(T* buffer, int count) { /* ... */ }
и код шаблона вызывающего абонента похож на
template <typename A>
void Process(A val1, A val2) { /* ... */ }
template <typename A>
void ProcessBuffer(A* buffer, int count)
{
ApplyFuncOnBuffer<A, &Process>(buffer, count);
}
Это хорошо, он компилируется и работает, но я хотел бы упростить вызов из
ApplyFuncOnBuffer<A, &Process>(buffer, count);
to
ApplyFuncOnBuffer<&Process>(buffer, count);
Это означает найти способ определить T из аргумента шаблона FUNC. Я искал и пробовал решения, но «шаблонизировал» аргумент FUNC.
template <template <typename T> void (*FUNC)(T, T)>
void ApplyFuncOnBuffer(T* buffer, int count) { /* ... */ }
Компилятор MSVC говорит:
error C2988: unrecognizable template declaration/definition
error C2059: syntax error : '<L_TEMPLATEDECL>'
error C2143: syntax error : missing ',' before '<end Parse>'
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
Что глобально говорит о том, что синтаксис неверен.
Наконец, мой вопрос: кто-нибудь знает какой-нибудь правильный синтаксис, который позволяет определить тип T из аргумента шаблона FUNC без необходимости добавлять его явно в качестве аргумента шаблона ApplyFuncOnBuffer?
T
отFUNC
, ваш шаблон будетtemplate <typename F, F f> void ApplyFuncOnBuffer(extractT<FUNC>* buff, int count)
сApplyFuncOnBuffer<decltype(&Process), &Process>(buffer, count);
:/ - person Jarod42   schedule 30.07.2015FUNC
в качестве аргумента? - person Jarod42   schedule 30.07.2015using
. Знаете, каков статус этой бумаги? - person Barry   schedule 30.07.2015