具有模板专业化的标签分配

时间:2019-01-29 15:49:38

标签: c++

分派专用标签是否有效?以下代码可以编译并运行,没有任何错误。但是我仍然想确认这样做是否有效。

import re
_XHTML_ESCAPE_RE = re.compile('[&<>"\']')
_XHTML_ESCAPE_DICT = {'&': '&amp;', '<': '&lt;', '>': '&gt;', '"': '&quot;',
                      '\'': '&#39;'}

def xhtml_escape(value):
    """Escapes a string so it is valid within HTML or XML.

    Escapes the characters ``<``, ``>``, ``"``, ``'``, and ``&``.
    When used in attribute values the escaped strings must be enclosed
    in quotes.

    .. versionchanged:: 3.2

       Added the single quote to the list of escaped characters.
    """
    return _XHTML_ESCAPE_RE.sub(lambda match: _XHTML_ESCAPE_DICT[match.group(0)],
                                value)

还有,还有其他方法可以实现相同的目标吗?

1 个答案:

答案 0 :(得分:2)

您的专业标签没有什么用。您以一种奇怪的方式使用SFINAE,只需执行以下操作即可:

template <typename T> struct tag{};

std::string real_func(tag<std::string>, int i) {
    return to_string(i);
}

template <typename T, typename std::enable_if<std::is_arithmetic<T>::value, int>::type = 0>
T real_func(tag<T>, int i) {
    return static_cast<T>(i);
}

template <typename T>
T func(int i) {
    return real_func(tag<T>(), i);
}