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模板模板概念语法。
1条答案
按热度按时间xxslljrj1#
您可以检查
.zug<int>(0)
是否有效,或任何固定的示例化(包括作为其他模板参数的函数的示例化)。这将与
.zug()
的测试相同。如果不尝试示例化,则无法检查泛型模板。
在反射被添加到C++之后,可能就可以这样做了。