개발/C++ 22

흥미로운 반복 템플릿 패턴 (CRTP)은 무엇입니까?

책을 참조하지 않고 코드 예제와 함께 CRTP에 대한 좋은 설명을 제공 할 수 있습니까? 요컨대, CRTP는 클래스 A가 클래스 A 자체에 대한 템플릿 전문화 인 기본 클래스를 갖는 경우입니다. 예 template class X{...}; class A : public X {...}; 이상하게 되풀이되지 않나요? :) 자, 이것은 당신에게 무엇을 제공합니까? 이것은 실제로 X 템플릿에 해당 전문화에 대한 기본 클래스가 될 수있는 기능을 제공합니다. 예를 들어 다음과 같은 일반 싱글 톤 클래스 (단순 버전)를 만들 수 있습니다. template class Singleton { public: static ActualClass& GetInstance() { if(p == nullptr) p = new Actu..

개발/C++ 2020.09.30

함수 템플릿의 기본 템플릿 인수

기본 템플릿 인수가 클래스 템플릿에서만 허용되는 이유는 무엇입니까? 멤버 함수 템플릿에서 기본 유형을 정의 할 수없는 이유는 무엇입니까? 예를 들면 : struct mycclass { template void mymember(T* vec) { // ... } }; 대신 C ++에서는 기본 템플릿 인수가 클래스 템플릿에서만 허용되도록 강제합니다. 기본 템플릿 인수를 제공하는 것이 좋습니다. 예를 들어 정렬 함수를 만들 수 있습니다. template > void sort(Iterator beg, Iterator end, Comp c = Comp()) { ... } C ++ 0x는이를 C ++에 도입합니다. Bjarne Stroustrup의이 결함 보고서 : 함수 템플릿에 대한 기본 템플릿 인수 및 그가 말하..

개발/C++ 2020.09.30

4x4 행렬 반전

4x4 매트릭스를 반전하는 방법에 대한 샘플 코드 구현을 찾고 있습니다. Gaussian eleminiation, LU 분해 등이 있다는 것을 알고 있지만 자세히 살펴 보는 대신 실제로이 작업을 수행 할 코드를 찾고 있습니다. 언어 이상적으로는 C ++, 데이터는 열 우선 순서로 16 개의 부동 소수점 배열로 제공됩니다. 여기: bool gluInvertMatrix(const double m[16], double invOut[16]) { double inv[16], det; int i; inv[0] = m[5] * m[10] * m[15] - m[5] * m[11] * m[14] - m[9] * m[6] * m[15] + m[9] * m[7] * m[14] + m[13] * m[6] * m[11] - m..

개발/C++ 2020.09.26

C ++ 0x에서 해시 값을 어떻게 결합합니까?

C ++ 0x는 hash (...)를 추가합니다. 그러나 부스트에 제시된 것처럼 hash_combine 함수를 찾을 수 없습니다. 이와 같은 것을 구현하는 가장 깨끗한 방법은 무엇입니까? 아마도 C ++ 0x xor_combine을 사용하고 계십니까? 글쎄, 그냥 부스트 녀석들이했던 것처럼하세요 : template inline void hash_combine(std::size_t& seed, const T& v) { std::hash hasher; seed ^= hasher(v) + 0x9e3779b9 + (seed2); } 이 솔루션을 찾는 다른 사람들에게 유용 할 수 있으므로 여기에서 공유하겠습니다. @KarlvonMoor 답변에서 시작하여 여러 값을 함께 결합해야하는 경우 사용이 더 간결한 가변 템..

개발/C++ 2020.09.26

벡터를 함수에 전달하는 방법은 무엇입니까?

벡터를 함수에 대한 인수로 보내려고하는데 어떻게 작동하는지 알 수 없습니다. 여러 가지 방법을 시도했지만 모두 다른 오류 메시지를 표시합니다. 이 부분 만 작동하지 않기 때문에 코드의 일부만 포함합니다. (벡터 "random"은 0에서 200 사이의 임의의 값으로 채워지지만 정렬 됨) 코드 업데이트 : #include #include #include #include using namespace std; int binarySearch(int first, int last, int search4, vector& random); int main() { vector random(100); int search4, found; int first = 0; int last = 99; found = binarySearch..

개발/C++ 2020.09.26

C에서 C ++ 함수를 호출하는 방법은 무엇입니까?

나는이 사실을 알고. C ++에서 C 함수 호출 : 내 응용 프로그램이 C ++이고 C로 작성된 라이브러리에서 함수를 호출해야했다면 다음을 사용했을 것입니다. //main.cpp extern "C" void C_library_function(int x, int y);//prototype C_library_function(2,4);// directly using it. 이것은 C_library_function이라는 이름을 엉망으로 만들지 않으며 링커는 입력 * .lib 파일에서 동일한 이름을 찾고 문제가 해결됩니다. C에서 C ++ 함수 호출 ??? 하지만 여기서는 C로 작성된 대형 애플리케이션을 확장하고 있으며 C ++로 작성된 라이브러리를 사용해야합니다. C ++의 이름 변경이 여기서 문제를 일으키고 ..

개발/C++ 2020.09.26

C ++ 함수 템플릿 부분 전문화?

아래 코드는 클래스의 부분 전문화라는 것을 알고 있습니다. template class MyClass { … }; // partial specialization: both template parameters have same type template class MyClass { … }; 또한 C ++에서는 함수 템플릿 부분 전문화를 허용하지 않는다는 것을 알고 있습니다 (전체 만 허용됨). 하지만 내 코드는 하나 / 동일한 유형 인수에 대해 함수 템플릿을 부분적으로 전문화했음을 의미합니까? Microsoft Visual Studio 2010 Express에서 작동하기 때문입니다! 아니라면 부분 전문화 개념을 설명해 주시겠습니까? #include using std::cin; using std::cout; u..

개발/C++ 2020.09.26
728x90