Вы должны использовать какую-то библиотеку кроссплатформенных потоков (так как вы упомянули независимость от ОС), но с учетом pthreads вы можете сделать.
template <T>
class myVarStorage
{
static std::map<int, T> store_;
public:
myVarStorage();
T getVar();
void setVar(T);
}
template <T> void myVarStorage::setVar<T>(T var)
{
store_[static_cast<int>pthread_self()] = var;
}
template <T> T myVarStorage::getVar()
{
return store_[static_cast<int>pthread_self()]; //throws exception
}
Я уверен, что код содержит ошибки вэто и должно рассматриваться как псевдокод, так как я псевдопрограммист, когда дело доходит до C ++.:)