当给定类型时,我可以将结构设置为 '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::hashstd::remove_reference 等不相关内容的参考资料,不如查看 C++ 书中有关模板特化的章节。