当给定类型时,我可以将结构设置为 'using' 类型吗? ('explicit specialization of non-template struct')
Can I set up structs to 'using' a type when given a type? ('explicit specialization of non-template struct')
我有以下结构,其中有许多具有不同的 'input' 和 'output' 类型。
#include <string>
template <>
struct Corresponding<const char*> {
using CorrespondingT = std::string;
};
这会导致错误:
explicit specialization of non-template struct
'Corresponding'
template <> struct Corresponding<const char*> { using Correspond...
这应该可以用作 Corresponding<T>::CorrespondingT
,在这种情况下,T 可以是 const char*
,但可以是其他类型,因为添加了更多类型,例如
template <>
struct Corresponding<int> {
using CorrespondingT = boost::multiprecision::cpp_int;
};
然后
template <typename T> using GetCorresponding = typename Corresponding<T>::CorrespondingT;
让我相信这行得通的来源:https://en.cppreference.com/w/cpp/utility/hash, https://en.cppreference.com/w/cpp/types/remove_reference。
还有其他问题出现同样的错误,但他们似乎在尝试不同的事情,因此与此处无关。
我正在使用 gnu++2a。
您只是忘记了声明主模板。
#include <string>
// You need this
template <typename T>
struct Corresponding;
template <>
struct Corresponding<const char*> {
using CorrespondingT = std::string;
};
没有它,如错误所述,Corresponding
不是 class 模板(或者实际上是 任何东西 ),因此不能为其定义特化.
与其查找 std::hash
和 std::remove_reference
等不相关内容的参考资料,不如查看 C++ 书中有关模板特化的章节。
我有以下结构,其中有许多具有不同的 'input' 和 'output' 类型。
#include <string>
template <>
struct Corresponding<const char*> {
using CorrespondingT = std::string;
};
这会导致错误:
explicit specialization of non-template struct
'Corresponding'
template <> struct Corresponding<const char*> { using Correspond...
这应该可以用作 Corresponding<T>::CorrespondingT
,在这种情况下,T 可以是 const char*
,但可以是其他类型,因为添加了更多类型,例如
template <>
struct Corresponding<int> {
using CorrespondingT = boost::multiprecision::cpp_int;
};
然后
template <typename T> using GetCorresponding = typename Corresponding<T>::CorrespondingT;
让我相信这行得通的来源:https://en.cppreference.com/w/cpp/utility/hash, https://en.cppreference.com/w/cpp/types/remove_reference。
还有其他问题出现同样的错误,但他们似乎在尝试不同的事情,因此与此处无关。
我正在使用 gnu++2a。
您只是忘记了声明主模板。
#include <string>
// You need this
template <typename T>
struct Corresponding;
template <>
struct Corresponding<const char*> {
using CorrespondingT = std::string;
};
没有它,如错误所述,Corresponding
不是 class 模板(或者实际上是 任何东西 ),因此不能为其定义特化.
与其查找 std::hash
和 std::remove_reference
等不相关内容的参考资料,不如查看 C++ 书中有关模板特化的章节。