c++ 我可以编写一个概念来测试“模板化成员”的存在吗

enxuqcxy  于 2023-04-13  发布在  其他
关注(0)|答案(1)|浏览(130)

1.有没有可能编写一个概念来检查模板成员的存在(而不仅仅是尝试任意的专门化)?
例如,检查类型是否包含接受模板参数的函数zug<T>(T)

struct SNoZug {};

struct SZug
  {
    template <typename T> // (A)
    void zug(T) {};
  };

template <typename T>
concept has_zug = ???; // << CAN THIS BE DONE?

static_assert(!has_zug<SNoZug>);
static_assert(has_zug<SZug>);

1.如果(A)使用概念参数(例如:template <some_other_concept T>)?
1.如果zug(A)使用可变参数,可以这样做吗?
1.如果zug使用值参数,可以这样做吗?
1.如果zug使用auto参数,可以这样做吗?
1.如果zug使用模板模板参数,可以这样做吗?
1.如果zug是一个成员类而不是成员函数,可以这样做吗?
注:相关未回答问题:Check the existence of a member function template in a concept definition
注意:这里有一些针对潜在相关问题的建议代码,但我不确定它是否是有效的C++:C++20模板模板概念语法。

xxslljrj

xxslljrj1#

您可以检查.zug<int>(0)是否有效,或任何固定的示例化(包括作为其他模板参数的函数的示例化)。
这将与.zug()的测试相同。
如果不尝试示例化,则无法检查泛型模板。
在反射被添加到C++之后,可能就可以这样做了。

相关问题