나는 여기에 대답 1과 동일한 CRTP 접근 (enable_crtp에서 파생)을 사용하고 있습니다 : How do I pass template parameters to a CRTP? 그러나 나는 너무 파생 클래스에서 파생 할 필요가있다. 이 포인터를 static_cast로 떨어 뜨리는 대신 CRTP 기본 클래스 사용에서 self() 메서드를 사용하여이 작업
CRTP가 템플릿 내에서 사용되는 경우 (또는 일반적으로 템플릿 매개 변수가 기본 클래스 템플릿 인수로 전달되는 경우) using 선언에 기본 멤버 템플릿의 이름을 지정할 수 있습니까? template< typename d >
struct base {
template<typename>
struct ct {};
template<
내 위젯 라이브러리에서 어떤 종류의 호출 체인을 초기화하려면 사용자가 제공 한 VIEW 클래스 (!)를 추가하는 다른 클래스에서 파생 될 수 있습니다 (예 : ) 이 : #include <iostream>
template<typename VIEW>
struct App
{
VIEW view;
void init() {view.initi
는 내가 모든 오류를 이해하지 못하는 내가 error: template specialization requires 'template<>'
Field<Class> const CRTP<Class>::_field("blah");
~~~~~~~~~~~^
을 얻을 연타 template<class T>
struct Field
{
cha
recursive template idiom을 사용하여 팩토리에서 기본 클래스의 모든 자식을 자동으로 등록합니다. 그러나 내 디자인에서 자식 클래스 친구 클래스로 기본 클래스가 있어야합니다. 팩토리를 통하는 것이 아니라이 클래스의 인스턴스 생성을 피하기 위해, Base 클래스의 생성자가 private이어야한다. 과도한 목표는 공장 등록이 BaseSolver
Old : CRTP 기본 클래스를 통해 가상 함수를 재정의하려면 어떻게해야합니까? struct I { virtual void foo() = 0; };
template<class D>
struct B { void foo() { } }; // provides implementation of foo in D
struct D : I, B<D> { }; /
내가 C++ (11 개) 메타 프로그래밍 기술과 CRTP를 많이 사용하는 작은 도서관을 작성한이 CRTP 코드를 컴파일하는 데 실패하고 지금 4.7.2 g ++ 잘 컴파일, 나는 시도 인텔 icpc 13.0.0.079로 컴파일하면 수백 개의 오류가 발생합니다. 그래서 나는 하나씩 문제를 격리하려고 노력한다. 그래서 A는 test_crtp.cpp(26): e
, 나는 template <class A>
class CRTP
{
template <int (A::*Member)()>
int func(void * obj)
{
int result
// Do something with Member, like
// result = (reinterpret_cast<