Используйте команду даты, чтобы преобразовать эти два раза в стандартный формат и вычесть их. Вы, вероятно, захотите сохранить предыдущее время выполнения в dotfile, тогда делают что-то как:
last = cat /tmp/.lastrun
curr = date '+%s'
diff = $(($curr - $last))
if [ $diff -gt 3600 ]; then
# ...
fi
echo "$curr" >/tmp/.lastrun
(Спасибо, Steve.)
Если у вас уже есть специализированный класс, вы можете указать другой реализация foo
в специализированном классе:
template<typename A, typename B>
class C
{
public:
void foo() { cout << "default" << endl; };
};
template<typename A>
class C<A, CObject>
{
public:
void foo() { cout << "CObject" << endl; };
};
Чтобы специализировать функцию-член в Visual C ++ 2008, вы также можете сделать ее шаблоном:
template<typename A, typename B>
class C
{
template<typename T>
void foo();
template<>
void foo<CObject>();
};
Похоже, что вышеприведенное решение будет доступно только в будущем стандарте C ++ (согласно черновик n2914 14.6.5.3/2).
Я думаю, здесь есть недоразумение.
Есть два вида шаблонов:
В вашем примере у вас есть шаблонный класс, который, конечно, содержит некоторые методы. В этом случае вам придется специализировать класс.
template <class A>
class C<A,CObject>
{
void foo() { ... } // specialized code
};
Проблема в вашем примере относительно проста: вы определяете метод foo для специализации C, но эта специализация никогда не объявлялась заранее.
Проблема здесь в том, что вам нужно полностью специализировать свой класс C (и, таким образом, копировать большой объем данных). Существует ряд обходных путей.
Поскольку класс является шаблоном, вам нужно его специализовать:
template <class A>
class C<A, CObject>
{
void foo() { ... }
}
Если я правильно помню, вы не можете сделать частичную специализацию шаблона для функций. Не уверен, включен ли он в C ++ 0X
Обновление:
(Ожидает подтверждения) Как отмечено в комментариях, частичная специализация функций шаблонов возможна в C ++ 0X.
Нет, частичная специализация шаблона функции в C ++ 0x не добавляется.
Как правильно упомянуто выше, в отношении шаблонов функций в основном было сделано 2 вещи:
Итак, как и раньше, следует использовать обходные пути для "имитации" частичной специализации шаблонов функций.