C++ 將在2020加入 Concept功能,用意是希望用checking限制template類型而達到更穩定的表現。
用macOS的人請先設定gcc-9地址
export CXX=/usr/local/bin/g++-9
CMakeLists.txt
cmake_minimum_required(VERSION 3.1..3.15)
project(helloConcepts)
# Default
# Add Library Path:
# Add Library:
//Choose your favourite libraries
# Build:
add_executable(main src/main.cpp)
# Link Libraries:
//Choose your favourite libraries
# C++ Version:
target_compile_options(main PUBLIC -std=c++2a -fconcepts)
以add為例子
auto add = (auto a, auto b){ return a+b;};
int main(){
vector<int> a{1,2,3};
auto b = a;
add(a,b)
//這樣就會報錯了
那麼我們可以怎麼做呢?
template<typename T1,typename T2>
concepts add_check = requires{
a + b;
}
tempalte<typename T1, typename T2>
requires add_check
auto add(T1 a, T2 b)
requires add_check{
return a + b;
這樣就可以避免古怪的模板類型問題了