我有一个类模板化在一个模板类型上的非类型属性指针上,这里是std::optional
。
#include <optional>
class A
{
public:
std::optional<int> i;
};
template <typename C, typename T, std::optional<T> C::*optionalPtr>
class OptionalHolder3
{
void doStuff(C &c);
};
using OH3 = OptionalHolder3<A, int, &A::i>;
它工作得很好,但我很好奇是否可以通过减少所需的模板参数的数量来使它更容易使用,但我找不到正确的语法:
// Doesn't compile
template <typename C, template<class T> std::optional<T> C::*optionalPtr>
class OptionalHolder2
{};
// Doesn't compile
template <template<class C, class T> std::optional<T> C::*optionalPtr>
class OptionalHolder1
{};
using OH2 = OptionalHolder2<A, &A::i>;
using OH2 = OptionalHolder1<&A::i>;
这可能吗?我该如何做?
1条答案
按热度按时间3okqufwl1#
你可以使用
auto
(C++17)来实现:C++20中的概念可能会被使用,而不是专门化,但是它需要一些trait来提取
T
和C
。