조차이 상황에 대한 올바른 용어가 무엇인지 확인합니다. 내가 그걸 알았다면 아마도 그 대답을 발견했을 것이다.가변 길이 배열
나는이의 더 일반적인 구현, 명시적인 전문 없습니다
template<typename T> void write(Buffer& b, const T& value);
처럼 보이는 플릿 기능을 가지고있다. 예 :
template<> void write<int>(Buffer& b, const int& value) { ... }
template<> void write<const char *>(Buffer& b, const char * const & value) { ... }
지금까지 그렇게 좋았습니다. 내가 write(buffer, "hello")
로 호출 할 때 그러나 물론 나는
undefined reference to `void write<char [6]>(Buffer&, char const (&) [6])'
이 오류는 나에게 의미가 불평 링크 오류가 발생합니다. 그러나 내가 알 수없는 것은 이것을위한 전문화를 선언하는 방법이다. 그러한 전문성을 원한다면 char[]
인수를 (const char*)
으로 전송하고 기존 전문화라고 부릅니다. 그러나 나는 이것을하는 방법을 이해할 수 없다.
구체적인 예를 들어 나는
template<size_t N> void write<char[6]>(Buffer& b, char const (&value) [6])
을 할 수 있지만, 일정한 가능한 모든 길이 문자열이 중 하나를 정의 할 분명히 허용하지 않습니다. 그러나 저는 다음을 시도해 보았습니다. 그 중 일부는 단지 빨대 만 잡는 것이었고 어떤 것도 작동하지 않았습니다.
template<size_t N> void write<char const[N]>(Buffer& ob, char const (&value) [N])
template<size_t N> template<> void write<char const[N]>(Buffer& ob, char const (&value) [N])
template<> template<size_t N> void write<char const[N]>(Buffer& ob, char const (&value) [N])
template<template<size_t N>> void write<char const[N]>(Buffer& ob, char const (&value) [N])
적절한 주문은 무엇입니까? 나는 GCC 4.7.3 x86_64를 사용하고있다. 이 OK 인 경우 (예를 들어, char[6]
은 나보다는 이러한 경우 char const*
을 사용),이를 구현하는 방법은 오버로드를 사용하는 것입니다 문자 배열로 write()
함수를 호출 할 때
@SnoopyLane -이 질문에 대답 했습니까? – sfjac
매우 늦은 답변에 대해 사과드립니다. 많은 산만 함. 사실, 이것은 문제를 설명해 주었고, 비 템플릿 버전은 제가 결국에 끝났습니다. 비 템플릿은 원래 내가 원했던 것이지만, 일부 메타 프로그래밍에서는주의를 분산시키고 템플릿을 필요로한다고 생각했습니다. 맨 위에 붙여 넣은 스 니펫은이를 단순화했습니다. – SnoopyLane