Слабо связанные шаблонные специализации

Можно ли определить слабо связанные шаблонные специализации?

В math_functions.h у меня есть:

namespace utils {

template <typename T_TYPE>
T_TYPE sqrt(T_TYPE value);

template <>
float sqrt(float value) __attribute__((weak));

template <>
double sqrt(double value) __attribute__((weak));

template <>
long double sqrt(long double value) __attribute__((weak));

} // End namespace utils.

В math_functions.cpp у меня есть реализации по умолчанию для специализаций шаблонов, которые я хочу перерезать:

namespace utils {

template <>
float sqrt(float value) {
return sqrtf(value);
}

template <>
double sqrt(double value) {
return sqrt(value);
}

template <>
long double sqrt(long double value) {
return sqrtl(value);
}

} // End namespace utils.

Затем у меня есть целевой файл для микроконтроллера, который должен обеспечить более эффективную функцию sqrt, специфичную для аппаратного обеспечения. Я хочу, чтобы это определение переопределило использование по умолчанию :: sqrt<поплавок> специализация:

hw.cpp:

namespace utils {

template <>
float sqrt<float>(float value) {
float out;
// Use hardware assembler call to run SQRT on VFPU.
__asm("VSQRT.F32 %0,%1" : "=t"(out) : "t"(value));
return out;
}

} // End namespace utils.

Возможно ли то, что я хочу сделать?

С кодом выше GCC жалуется на множественные определения utils :: sqrt.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]