는 전화를 걸 중 하나를 포함하는 객체의 비 정적 방법은 식별자를 반환컴파일 타임에 C++의 정적 및 비 정적 메서드를 구분합니까? 인스턴스 전을 식별하는 일부 추적 자동화를위한
- 항상 동일한 ID
에게 반환 뭔가 내 현재 솔루션은()와 개체의 컨텍스트에서가 아니라면 사용해야하는 전역 함수()와 메소드를 가진 기본 클래스를 갖는 것이다. 그러나 이것은 정적 멤버 함수에서는 작동하지 않습니다. 여기서 컴파일러는 전역 정적 메서드 대신 비 정적 메서드를 선호합니다.
간단한 예 :
class IdentBase
{
public:
Ident(const std::string& id) _id(id) {}
const std::string& which() const { return _id; }
private:
const std::string _id;
};
const std::string& which() { static const std::string s("bar"); return s; }
#define ident() std::cout << which() << std::endl
class Identifiable : public IdentBase
{
public:
Identifiable() : Ident("foo") {}
void works() { ident(); }
static void doesnt_work() { ident(); } // problem here
};
내가 어떻게 든 (아마도 몇 가지 템플릿 마법을 사용하여) 정적 멤버 함수에 대한 특별한 매크로 같은 작업 차선책을 사용하지 않도록 할 수 있습니까?
저는 함수 포인터를 사용하고 멤버 함수의 경우 바인더를 사용하여이 작업을 수행하는 방법이 있다고 확신합니다. 하지만 처음에는 디자인에 의문을 제기했습니다. 정적 및 비 정적 식별 가능 멤버 함수 모두에 동일한 코드를 작성해야하는 이유는 무엇입니까? "이 문제를 어떻게 해결할 수 있습니까?" "나는 내 문제를 해결하기 위해 이런 방식으로 붙어있다. 어떻게 더 얻을 수 있을까?" – sbi
정적 코드 대신 하나의 중앙 매크로를 사용하고 비 정적 코드를 사용하기 때문에 동일한 코드를 사용하고 싶습니다. 어쩌면 디자인이 올바르지 않을 수도 있지만, 적어도 나 자신은 더 나은 것을 보지 못합니다. –