여기이 클래스가 있습니다확실하지 왜지고있어 컴파일 오류
template<typename ClassType, std::size_t... Dims>
class MatrixCell {
private:
std::vector<std::size_t> coordinateIndices_;
ClassType data_;
public:
MatrixCell() : coordinateIndices_{Dims...} {}
//template<typename ClassType, std::size_t... Dims>
void addItem(ClassType item, std::size_t... Dims) {
if (!checkIndex(Dims...)) {
std::ostringstream strStream;
strStream << __FUNCTION__ << " current index doesn't exist.";
Logger::log(strStream, Logger::TYPE_ERROR);
throw ExceptionHandler(strStream);
} else {
data_ = item;
}
}
private:
//template<typename ClassType, std::size_t... Dims>
bool checkIndex(std::size_t... Dims) {
return true;
}
};
그리고 나는이 컴파일러 오류 받고 있어요 :
1>------ Build started: Project: FileTester, Configuration: Debug Win32 ------
1> Matrix.cpp
1>c:\users\skilz80\documents\visual studio 2015\projects\filetester\filetester\matrix.h(155): error C3543: 'std::size_t': does not contain a parameter pack
1> c:\users\skilz80\documents\visual studio 2015\projects\filetester\filetester\matrix.h(171): note: see reference to class template instantiation 'MatrixCell<ClassType,Dims...>' being compiled
1>c:\users\skilz80\documents\visual studio 2015\projects\filetester\filetester\matrix.h(168): error C3543: 'std::size_t': does not contain a parameter pack
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
};
을
오류 코드를 이해하는 데 문제가 없습니다. 정확히 무엇이 오류를 일으키는 지 이해하는 데 문제가 있습니다. 그리고 여러 가지를 시도한 곳에서 올바른 구문을 수정해야하는지 확실하지 않습니다.
나는 잘 여기에 표시된 데 모은 유사한 클래스가 있습니다// DimensionPack & Helper Struct
struct MatrixDimensionOddOrEven {
const unsigned int even_or_odd;
explicit MatrixDimensionOddOrEven(unsigned int odd_or_even) : even_or_odd(test(odd_or_even)) {}
private:
const unsigned int test(unsigned int value) const {
if (value == 0) {
std::ostringstream strStream;
strStream << __FUNCTION__ << "invalid number: " << value << " must be >= 1.";
Logger::log(strStream, Logger::TYPE_ERROR);
throw ExceptionHandler(strStream);
}
return (((value % 2) == 0) ? EVEN : ODD);
}
}; typedef MatrixDimensionOddOrEven MatDimOddEven;
template <std::size_t... Dims>
class DimensionPack {
public:
std::vector<std::size_t> dimensions;
std::vector<unsigned int> even_or_odd;
const std::size_t total_dimensions = sizeof...(Dims);
const std::size_t total_elements = countElements();
public:
DimensionPack() : dimensions{Dims...},
even_or_odd{ MatrixDimensionOddOrEven{Dims}.even_or_odd...} {
}
private:
std::size_t countElements() {
std::size_t val = 1; // Don't Init to 0 otherwise multiplication won't work here!
for (std::size_t n = 0; n < dimensions.size(); n++) {
val *= dimensions.at(n);
}
return val;
}
}; // DimensionPack
그래서 올바른 방향으로 포인터가 매우 유용 할 것, 그리고 매우 이해할 수있을 것이다.
void addItem(ClassType item, decltype(Dims)... dims) {
if (!checkIndex(dims...)) {
및
bool checkIndex(decltype(Dims)... dims) {
불행히도 VC++이 컴파일 할 수 없습니다
그래서 ... C++ (11) 또는 C++ (14)에 대한 질문은? 사양에 대한 태그를 포함하는 경우 하나만 사용하십시오. – tambre
@tambre 또는 @tambre 중 하나 또는 ... VS2015 너무 variadic 서식 파일 및 해당 매개 변수 팩에 대한 문제가 안된다 그래서 사용하고 있습니다 ... –
@ tambre 방금 일반 C++ 그대로 왼쪽 고정 –