C++17 非类型模板参数的auto 和 DevC++ 支持C++17
? ? ? 模板參數分為兩種,一種是類型模板參數,也是我們用得最多的一種:
template <typename T, typename U>
auto add(T t, U u) {
? ? return t+u;
}
? ? ?里面的 T 和 U 都是類型模板參數。
另一種是非類型模板參數,它可以讓不同的字面量成為模板的參數:
template <typename T, int BufSize>
class buffer_t {
public:
? ? T& alloc();
? ? void free(T& item);
private:
? ? T data[BufSize];
}
?
buffer_t<int, 100> buf; // 100 作為模板參數
? ? 我們在編寫模板的時候就必須明確非類型模板參數的具體類型,C++17 打破了這一限制,讓我們能夠在非類型模板參數中使用 auto 關鍵字,從而讓編譯器推導具體的類型:
template <auto value> void foo() {
? ? return;
}?
foo<10>();
?
一個測試程序;
//用auto非類型模板參數 #include <iostream> using namespace std; template<auto c>auto foot() {cout << c << endl;return c; }int main() {foot<312>();int m = 12;switch (m){case 0:cout << "switch0" << endl;case 1:cout << "switch1" << endl;case 2:cout << "switch2" << endl;default:cout << "default" << endl;break;}if (int m = 23; m > 24){cout << "m<<" << m << endl;}return 0; }設置devcpp支持C++11,然后run;
? ? auto的定義有問題;看工具版本,5.11,應該是當前最新;
重新設置支持c++14;
然后run;template<auto c>認識了;但出一個錯,?'auto' parameter not permitted in this context,此錯誤的含義是,
? ? 在此上下文中不允許使用“auto”參數
暫時沒怎么有時間看代碼;環境設置輸入 c++17 看一下;
? ? devcpp不認識此配置;配置最多輸入到c++14;有時間再繼續;
?
總結
以上是生活随笔為你收集整理的C++17 非类型模板参数的auto 和 DevC++ 支持C++17的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VC++开发一个简易图片浏览器 - 含目
- 下一篇: MFC CAsyncSocket类基本使