Я не уверен, как явно создать экземпляр шаблона, если аргумент шаблона - это тип bool, а не тип. Я свел мой код к этому короткому примеру. Я получаю ошибку от clang (используя -std=c++2a
):
Vec.cpp:13:20: error: explicit instantiation of 'angle' does not refer to a function template, variable template, member function, member class, or static data
member
template bool Vec::angle<false>;
Вот мой код:
Ve c .hpp:
class Vec {
public:
template <bool degrees>
double angle(void);
};
Ve c. cpp:
#include "Vec.hpp"
template <bool degrees>
double Vec::angle(void) {
if constexpr (degrees) {
// degree math
return 360;
} else {
// radian math
return 2*3.14;
}
}
template bool Vec::angle<false>; // I don't understand what I should put here
main. cpp:
#include "Vec.hpp"
#include <iostream>
int main(void) {
Vec v;
std::cout << v.angle<false>() << "\n";
return 0;
}