2016-11-28 106 views
4

我嘗試這個小片的代碼,我從概念技術規範修改:C++概念:無效引用功能概念

template < typename T > 
    concept bool C_Object() { 
     return requires { 
     T(); 
     }; 
    } 

    template < typename Object > 
    requires C_Object<Object> 
    class Foo { 
    public: 
     Object test; 
    }; 

struct Component { 
    int data; 
    Component() : data(0) {} 
}; 

int main() { 
    Foo<Component> test; 
    return 0; 
} 

但我得到這個錯誤:

test.cpp:10:12: error: invalid reference to function concept ‘template<class T> concept bool C_Object()’ 
    requires C_Object<Object> 
      ^~~~~~~~~~~~~~~~ 
test.cpp: In function ‘int main()’: 
test.cpp:26:16: error: template constraint failure 
    Foo<Component> test; 
       ^
test.cpp:26:16: note: constraints not satisfied 
test.cpp:26:16: note: ill-formed constraint 

第一次餘嘗試我缺少的C++概念的新版本?

感謝

有一個偉大的日子

回答

4

這個定義:

template < typename T > 
concept bool C_Object() { 
    return requires { 
    T(); 
    }; 
} 

C_Object定義爲一個函數的概念。這一個:

template < typename Object > 
requires C_Object<Object> 
class Foo { 
public: 
    Object test; 
}; 

使用C_Object就好像它是一個變量的概念。在要求條款,則必須使用()爲「調用」功能的概念:

template < typename Object > 
requires C_Object<Object>() 
class Foo { 
public: 
    Object test; 
}; 

或者,您可以使用「簡潔」佔位符語法約束Object不區分變量和函數的概念:

template < C_Object Object > 
class Foo { 
public: 
    Object test; 
}; 
+0

你最後的代碼是我正在搜索的東西,非常感謝:) –