Я привык к шаблонам 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);
в
ApplyFuncOnBuffer<&Process>(buffer, count);
Что значит найти способ определения Т из FUNC аргумента шаблона я искал и пробовал решение, но «templatizing» аргумент 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?
Вы ищете функцию, которая еще не включена в язык, но уже была предложена: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3601. html – Columbo
Даже с признаком получите 'T' из' FUNC', ваш шаблон будет 'template void ApplyFuncOnBuffer (extractT * buff, int count)' с 'ApplyFuncOnBuffer (buffer, count); ':/ –
Jarod42
Не могли бы вы передать аргумент FUNC'? – Jarod42