Skip to content

Instantly share code, notes, and snippets.

@darchons
Created February 6, 2014 03:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save darchons/8838009 to your computer and use it in GitHub Desktop.
Save darchons/8838009 to your computer and use it in GitHub Desktop.
template <class Impl>
class Base {
public:
static int DoWork() {
return Impl::DoSubWork();
}
};
class WorkA : public Base<WorkA> {
public:
static int DoSubWork() {
return 1;
}
};
class WorkB : public Base<WorkB> {
public:
static int DoSubWork() {
return 2;
}
};
int main() {
WorkA::DoWork();
WorkB::DoWork();
return 0;
}
template<class Work>
int DoWork() {
return Work::DoSubWork();
}
class WorkA {
public:
static int DoSubWork() {
return 1;
}
};
class WorkB {
public:
static int DoSubWork() {
return 2;
}
};
int main() {
DoWork<WorkA>();
DoWork<WorkB>();
return 0;
}
class Base {
public:
virtual int DoSubWork() = 0;
int DoWork() {
return DoSubWork();
}
};
class WorkA : public Base {
public:
virtual int DoSubWork() {
return 1;
}
};
class WorkB : public Base {
public:
virtual int DoSubWork() {
return 2;
}
};
int main() {
WorkA().DoWork();
WorkB().DoWork();
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment