Цель состоит в том, чтобы включить функцию-член, когда параметром шаблона класса является указанный c шаблонный класс Ptr <U>
. Следующий код действительно работает, но требует повторения параметра шаблона U
.
#include <iostream>
using namespace std;
template <class T> class Ptr
{
public:
};
template <typename T, typename U> concept is_a_Ptr = std::is_same <T, Ptr <U>>::value == true;
template <class T> class Container
{
public:
void PlainFoo () {};
template <class U> void OptionalFoo () requires is_a_Ptr <T,U> {};
};
int main(int argc, char* argv[])
{
Container <Ptr <int>> foo;
foo.OptionalFoo <int> (); // Requires <int> to be specified
// foo.OptionalFoo (); // Would like to be able to do this
return 0;
}
Есть ли способ избежать указания int
? Я знаю, что это может быть реализовано со специализацией, но это требует значительного количества рефакторинга кода, поэтому я надеюсь, что этого не потребуется.