() Preamble : 나는 C++ 0x 게임의 추종자이며 C++ 0x 표준의 개념 제거에 관한 최근의 논란은 저에게 동기를 부여했습니다. 개념에 대해 더 많은 것을 배우는 것에 관심이 있습니다. 특히, 개념이 유효한 C++ 코드가 될 수없는 한, 모든 질문이 완전히 가설적이라는 것을 이해합니다. 최근의 결정과 논쟁 뒤에있는 장점을 더 잘 이해하는 데 어떻게 도움이 될지)가상의 C++ 0x 개념 질문들
C++ 0x (최근까지) 개념에 대한 소개 자료를 읽은 후 문제가 발생했습니다. 내 마음을 구문 론적으로 둘러싼 다. 문제. 더 이상 신경 쓰지 않고 여기 내 질문이 있습니다 :
1) 내재적으로, auto 키워드를 통해 또는 concept_maps를 통해 명시 적으로 파생 개념을 지원하는 유형도 기본 개념을 독립적으로 지원해야합니까? 즉, 다른 개념 (예 : concept B<typename T> : A<T>
)에서 개념을 유도하는 행위가 암시 적으로 '보이지 않는'요구 사항 (B 내 requires A<T>;
)을 포함합니까? 클래스 상속에서와 마찬가지로
, 또한 기본 개념의 요구 사항을 충족 파생 개념의 요구 사항을 충족 유형 : 혼란은 상태 개념에 대한 위키 백과 페이지에서 발생한다. 유형은 반드시 나에게 아무 의미 기본 개념의 요구 사항을 파생 된 개념의 요구 사항을 충족해야하지 말 것
. 나는 Wikipedia가 결정적인 근원에서 멀리다는 것을 이해한다; 위의 설명은 단어의 잘못된 선택입니까?
2) 입력 이름을 나열하는 개념을 '자동'으로 지정할 수 있습니까? 그렇다면 컴파일러는 이러한 typename을 어떻게 자동으로 매핑합니까? 그렇지 않다면 컨셉에 '자동'을 사용하는 것이 무효가되는 다른 경우가 있습니까? 이러한 클래스 중 하나가 SomeType을 일치합니다
template<typename Type>
class Dummy {};
class Dummy2 { public: typedef int Type; };
auto concept SomeType<typename T>
{
typename Type;
}
template<typename T> requires SomeType<T>
void function(T t)
{}
int main()
{
function(Dummy<int>()); //would this match SomeType?
function(Dummy2()); //how about this?
return 0;
}
: 명확히하기 위해
다음 가상 코드를 살펴? 또는 typemames와 관련된 개념에 필요한 concept_map입니까?
3) 마지막으로, 어떤 공리를 정의 할 수 있는지 이해하는 데 어려움을 겪고 있습니다. 예를 들어, 나는 그런
concept SomeConcept<typename T>
{
T operator*(T&, int);
axiom Inconsistency(T a)
{
a * 1 == a * 2;
}
}
으로 그 무엇을 할 것, 개념은 논리적으로 일관성이 공리를 정의 할 수? 그것도 유효합니까?
매우 긴 질문이므로 감사드립니다.
좋은 답변입니다. 당신은 내가 2)와 3)의 질문에 대한 의혹을 확인했고, 나는 그런 식으로 생각하지 않았습니다. 다시 한번 감사드립니다. – GRB