因此,当我在VS2015中将auto关键字与简单的内容一起使用时,如下所示:

如您所见,它显示了变量的类型,但是,当我尝试更复杂的操作(或在另一个文件中定义?)时,它却吓了一跳,并给了我一些不太有用的信息: 
尽管VS仍然能够确定top的类型:

因此,我想知道是否有一种方法可以使这个出色的IDE在其他地方显示那些复杂/定义的类型?
我有以下代码示例(可在coliru在线获取):
#include <iostream>
#include <utility>
struct Bar {
int a;
};
template <class T>
void print_arg(const T& arg) {
std::cout << arg << std::endl;
}
std::ostream& operator<<(std::ostream& os, const Bar& b) {
os << b.a;
return os;
}
template <class T1, class T2>
std::ostream& operator<<(std::ostream& os, const std::pair<T1, T2>& pair) {
os << "Pair(" << pair.first << ',' << pair.second << ")";
return os;
}
int main()
{
auto bar = Bar{1};
print_arg(bar);
print_arg(std::make_pair(bar, bar));
print_arg(std::make_pair(bar, 1));
print_arg(std::make_pair(0, …Run Code Online (Sandbox Code Playgroud) 刚开始学习一些cpp并得到了这些东西:
#include <string>
using std::string;
class Vigenere{
public:
Vigenere(string key, string alphabet = "abcdefghijklmnopqrstuvwxyz");
string encode(string message, string key = _key, string alphabet = _alphabet);
string decode(string message, string key = _key, string alphabet = _alphabet);
private:
string _alphabet;
string _key;
};
Run Code Online (Sandbox Code Playgroud)
在尝试编译时说"10 [错误]无效使用非静态数据成员'Vigenere :: _ key'";
第10行是字符串Key;
那么,是否有一种方法可以实现它,以便我可以将这些变量分别用于每个对象,同时将它们用作默认参数?