간단한 컴파일 타임 메타 프로그래밍과 함께 할 수있는 코드를 작성 중입니다. 빈 struct 태그를 컴파일 타임 기호로 사용하는 것이 일반적입니다. 일부 런타임 구성 요소를 사용하여 태그를 꾸밀 필요가 있습니다. 정적 변수는 (메타 프로그래밍을 가능하게하기 위해) 유일한 방법이지만, 정적 변수는 전역 선언을 필요로합니다. 정적 변수의 초기화를 클래스 변수가 아닌 함수 안에 선언하여 시퀀싱하는 것에 대한 Scott Myers의 제안 (Effective C++ 제 3 판)을 참고하십시오.컴파일 시간 문자열 리터럴을 사용한 메타 프로그래밍
그래서 다음 코드를 생각해 냈습니다. 가설은 런타임시 문자열 리터럴을 사용할 수있는 컴파일 타임 기호를 갖게한다는 것입니다. 내가 희망하는 것을 놓치지 않고, 올바르게 작동 할 것입니다. 런타임 템플릿을 사용하기 전에 런타임 필드를 채우기 만하면됩니다. .
#include <string>
template<class Instance>
class TheBestThing {
public:
static void set_name(const char * name_in) {
get_name() = std::string(name_in);
}
static void set_fs_location(const char * fs_location_in) {
get_fs_location() = std::string(fs_location_in);
}
static std::string & get_fs_location() {
static std::string fs_location;
return fs_location;
}
static std::string & get_name() {
static std::string name;
return name;
}
};
struct tag {};
typedef TheBestThing<tag> tbt;
int main()
{
tbt::set_name("xyz");
tbt::set_fs_location("/etc/lala");
ImportantObject<tbt> SinceSlicedBread;
}
편집 : 제작 커뮤니티 위키.
@ 하산 : 나는 지금 당장 그것을 알아 챘다. 하지만 여전히 더 나은 태그를 사용할 수 있습니다. :) -1. –
태그는이 특정 질문을 찾는 모든 사용자에게 적합합니다. –
그러나 질문은 무엇입니까? –