Ich möchte einen MP Prädiktor für einen Typ und eine Funktion schreiben. Es scheint, dass etwas illegal ist:Typ und Nicht-Typ Vorlage Spezialisierung
#include <iostream>
template <class R>
struct X {
static constexpr int value = 0;
};
// Specialization for type
template <>
struct X<int(int)> {
static constexpr int value = 1;
};
// ERROR: Redefinition with diffrent kind
template <int (*F)(int)>
struct X {
static constexpr int value = 2;
};
int fun(int);
int main(int, char* [])
{
std::cout << "X<int>: " << X<int>::value << '\n';
std::cout << "X<int(int)>: " << X<int(int)>::value << '\n';
std::cout << "X<decltype(fun)>: " << X<decltype(fun)>::value << '\n';
std::cout << "X<fun>: " << X<fun>::value << '\n';
return 0;
}
Ist es möglich, so etwas zu erreichen? Weitere Details: Wofür?
- Um metaprogramming
- lernen, um einen universellen Prädiktor zu schreiben, die eine Funktion/eine Objektinstanz mit einem bestimmten Argument (so etwas wie is_callable von C++ 17)
Sie könnten [dies] (http://coliru.stacked-crooked.com/a/97298936e850a900) interessant finden. Oder nicht. – ildjarn
Sicherlich etwas verwandt und interessant, auch wenn das Problem nicht gelöst wird. Also danke :) – user2146414