我有这个片段,可以用clang ++和g ++很好地编译,对我来说似乎还可以:
template <typename T, std::vector<T> & v>
struct A{};
int main () {
static std::vector<int> v;
A<typename decltype(v)::value_type, v> a;
return 0;
}
...但是A<typename decltype(v)::value_type, v> a;
看起来很多余。
我一直在尝试修改A
的模板声明,以便自动推断decltype(v)::value_type
,但到目前为止还没有成功。是否可以在A<v> a;
内实现main()
?
答案 0 :(得分:1)
在C ++ 17中,您可能具有:
template <auto&> struct A;
template <typename T, std::vector<T> & v>
struct A<v>
{
// ...
};
int main()
{
static std::vector<int> v;
[[maybe_unused]] A<v> a;
}
在以前的标准中,您需要
template <typename T, T& v> struct A;
template <typename T, std::vector<T>& v>
struct A<std::vector<T>, v>{};
或类似的
MACRO可能有助于避免使用冗长的decltype(v), v
:
#define AUTO(v) decltype(v), v
int main()
{
static std::vector<int> v;
A<AUTO(v)> a;
static_cast<void>(a); // Avoid warning about unused variable
}