按照“ C ++模板完整指南”,我编写了以下代码:
$( '#features' ).show()
.css( {'opacity': 0, 'bottom': '-100px' } )
.animate( { 'opacity': '1', 'bottom' : 0 }, 1000 );
并在函数#include <vector>
#include <cassert>
#include <string>
template <typename T, typename Cont = std::vector<T>>
class Stack
{
public:
Stack() = default;
Stack(T elem) :
elems({std::move(elem)})
{ }
auto push(T const& elem) -> void;
auto pop() -> void;
auto top() const -> T const&;
auto empty() const -> bool
{
return elems.empty();
}
private:
Cont elems;
};
Stack(char const*) -> Stack<std::string>;
template <typename T, typename Cont>
auto Stack<T, Cont>::push(T const& elem) -> void
{
elems.push_back(elem);
}
template <typename T, typename Cont>
auto Stack<T, Cont>::pop() -> void
{
assert(!elems.empty());
elems.pop_back();
}
template <typename T, typename Cont>
auto Stack<T, Cont>::top() const -> T const&
{
assert(!elems.empty());
return elems.back();
}
中按如下方式使用模板类Stack
:
main
我假设由于提供的“模板推导指南”,具体类型为auto main() -> int
{
Stack stack_string {"hello"};
std::cout << stack_string.top().size() << std::endl;
}
但是编译器(带有C ++ 17的Visual Studio 15 2017)产生错误,指出返回类型Stack<std::string, std::vector<std::string>>
为Stack::top
如何让const char *const
类型的“模板推导指南”起作用?
答案 0 :(得分:1)
至少某些版本的MSVC需要:
template<std::size_t N>
Stack(char const(&)[N]) -> Stack<std::string>;
在执行推导之前,它似乎并没有将数组“衰减”为指针。