어떤 클래스의 "getter"메소드와도 작동 할 수있는 일반 알고리즘을 만드는 방법으로 boost :: lambda가 있습니다.부스트 람다 : 객체에 대한 메소드 호출
알고리즘은 속성의 중복 값을 검색하는 데 사용되며 모든 클래스의 속성에서 작동하도록하고 싶습니다. 두 인터페이스를 사용하여,
var duplicateIds = FindNonUniqueValues<Dummy>(d => d.GetId());
var duplicateNames = FindNonUniqueValues<Dummy>(d => d.GetName());
내가 일을 "모든 클래스"부분의를 얻을 수 있습니다 : 방법의
class Dummy
{
public String GetId() ...
public String GetName() ...
}
IEnumerable<String> FindNonUniqueValues<ClassT>
(Func<ClassT,String> propertyGetter) { ... }
사용 예 : C#에서
, 나는 같은 것을 할 것 또는 템플릿 메소드를 사용하지만 "for any method"부분을 작동시키는 방법을 아직 찾지 못했습니다."d => d.GetId()"람다를 C++ (Boost 사용 여부에 관계없이)와 비슷한 방식으로 수행 할 수 있습니까?
알고리즘을 일반화하기위한 대안으로, C++ ian 솔루션을 사용해도 좋습니다.
VS2008에서 C++/CLI를 사용하므로 C++ 0x lambdas를 사용할 수 없습니다.
는, A *는 "더 C++ 이안 솔루션"*은''기능의 스타일로 이동하는 것, 예를 들어, 참조 'unique()'/'unique_copy()'. –
제 이해는 벡터가이고 벡터에서 고유하지 않은 T를 찾고 싶을 때 unique()과 유사한 알고리즘이 작동하지만 고유하지 않은 T.method를 찾고있는 경우가 아닙니다.) –
ckarras
'unique()'와 같은 많은 알고리즘 호출은 기본 연산 대신 사용되는 술어를 전달할 수있는 두 번째 형식을 가지고 있습니다. 'unique (myVec.begin(), myVec.end(), myComparator())'. –