К сожалению, единственный учебник, который я нашел около concepts
, был учебным пособием по концепции (и он был действительно базовым). И даже с технической спецификацией существует некоторая функция подписи, которую я не знаю, как перевести на понятия (может быть, только потому, что мой английский плохой, и я не могу хорошо прочитать техническую спецификацию).Концепции C++: преобразование функций некоторых подписей
Так есть список функций подписи я до сих пор не знаю, как "перевести":
CFoo -> класс CFoo {};
void Foo1() const;
CFoo& Foo2();
void Foo3(CFoo&);
{static, friend, ... } void Foo4();
template < typename ... Args > void Foo5(Args && ... args);
Я хочу иметь некоторый интерфейс для класса с этими функциями. Даже не знаю, возможно ли это на данный момент. Foo2 и Foo3, похоже, та же проблема.
Честно говоря, я действительно хочу знать Foo2 и Foo5.
Я попробовал нечто, для Foo2, но я не имею ни малейшего представления о Foo5:
class Handle {};
template < typename Object >
concept bool C_Object =
requires(Handle handle) {
{get(handle)} -> Object&
};
template < C_Object Object >
class Foo {
Object obj;
};
int main() {
Foo<int> test;
return 0;
}
Я знаю, что это не будет компилироваться, потому что Foo не имеют ПОЛУЧИТЬ menber, но они не являются правильные ошибки:
Test1.cpp:6:16: error: there are no arguments to ‘get’ that depend on a template parameter, so a declaration of ‘get’ must be available [-fpermissive]
{get(handle)} -> Object&
^
Test1.cpp:6:16: note: (if you use ‘-fpermissive’, G++ will accept your code, but allowing the use of an undeclared name is deprecated)
Test1.cpp: In function ‘int main()’:
Test1.cpp:18:10: error: template constraint failure
Foo<int> test;
^
Test1.cpp:18:10: note: constraints not satisfied
Test1.cpp:4:14: note: within ‘template<class Object> concept const bool C_Object<Object> [with Object = int]’
concept bool C_Object =
^~~~~~~~
Test1.cpp:4:14: note: with ‘Handle handle’
Test1.cpp:4:14: note: the required expression ‘get(handle)’ would be ill-formed
Если кто-то может указать мне некоторые ресурсы или, почему бы нет, решение. Это будет замечательно.
великий день
Вы правы, я был ослеплен концепцией и классом. Большое спасибо. Я попробую это и закрою вопрос, если вы считаете, что Foo5 слишком выходит за рамки. –