우리는 우리의 코드를 리팩터링하려고하고 있으며 다음과 같은 개선 사항 중 하나가 있습니다. 많은 함수가 많은 인수를 갖지만 많은 함수가 공통 하위 집합을 공유합니다. 그래서 우리는 그것들을 그룹 짓는 구조를 만들고 싶습니다. 문제는 일부 함수는 const가 아닌 일부 매개 변수가 필요하다는 것입니다. 이러한 함수 중 일부는이 매개 변수 그룹화 구조를 제공하는 이러한 함수의 하위 집합을 호출 할 수 있어야하지만 다음 제한이 있습니다. 호출 된 함수는이 구조체의 constness를 "저하"시킬 수 없습니다 (다음 예제 참조). 이 구조체의 모든 필요한 변형을 구현하면 문제는 해결되지만 우아하게는 해결되지 않습니다. 우리가 작업중인 하나의 해결책은 예컨대, 템플릿을 사용하는 것입니다함수 인수 그룹화 및 const
template<class A, class B, class C>
struct my_container
{
A a;
B b;
C c;
};
void foo1(my_container<int, char, float const> & my_cont)
{
}
void foo2(my_container<int const, char, float const> & my_cont)
{
// This should NOT be allowed: we do mind something being const to be treated by the
// called function as non-const.
foo1(my_cont);
}
void foo3(my_container<int, char, float> & my_cont)
{
// This should be allowed: we don't mind something being non-const to be treated by the
// called function as const.
foo2(my_cont);
}
우리의 문제는에서는 foo2 컴파일러가 불평없이 foo1은 호출이며, 우리는 정반대을하고 싶습니다. 템플릿으로 구현할 수 있습니까? 다른 기술이 있습니까?
const가 개별적으로 달라지는 경우 나에게 보입니다. 그 주장을 그룹화하려고하지 마십시오. – visitor
템플릿은 관련성이없는 세 개의 값을 함께 뭉치 게한다는 것을 나타냅니다. - 관련 기능에 대한 실제 수업이있는 경우 일반적으로 부분 수정이 가능하다고 생각하지 않습니다. 예를 들어 Point 인스턴스의 x 좌표 만 수정하고 y는 수정하지 않는 함수는 허용되지 않습니다. 그것이 중요하다면, 당신은 그것들을 별도의 주장으로 전달할 것입니다. – UncleBens