Видение Microsoft соединения рабочего процесса разработчика/разработчика определенно, кажется, ломается в реальной жизни. У меня есть опыт при работе над довольно крупномасштабным проектом WPF, который включил 2 специализированных ресурса дизайна в течение приблизительно 4 месяцев. Вот некоторые те, что Microsoft, кажется, часто забывает.
Так данное вышеупомянутое, что я заметил, было то, что это создает новый тип задания - или очень обидчивый разработчик или графически просвещенный программист. В основном, кто-то, кто может взять активы дизайна в необработанной форме - обычно .psd или формат иллюстратора и применить их по мере необходимости к процессу приложения.
я оказался тем парнем (графически просвещенный программист). Я провел много времени, экспортировав XAML из файлов Illustrator, очистив их вручную при необходимости, и делая эти активы легко применимыми экранными объектами в Смешении или VS. Были также времена, где я возьму элемент дизайна и перерисую его с помощью смешения (обычно, когда исходный актив был базирующимся битовым массивом, и имело больше смысла преобразовывать его в вектор).
Мое приложение не могло быть типовым - поскольку это была чрезвычайно графически богатая и независимость разрешения, была одна из основных целей, поскольку это должно было выглядеть хорошим на нескольких разрешениях, и соотношения сторон (думайте о трудностях при разработке для ТВ в сегодняшней среде - вещи должны выглядеть хорошими и в низком-res SD и масштабироваться хорошо до HD с высокой разрешающей способностью).
, Таким образом, я думаю, что WPF является потрясающей технологией и абсолютно шагом в правильном направлении для Microsoft. Это однако не конец - все решение самого важного для интеграции разработчика в процессе разработки - если Вы не переопределяете роль разработчика.
Частичная специализация допустима только для классов, но не функций.
Обходной путь:
template <typename U, typename V>
class Foo<std::pair<U, V> > {
public:
static int bar() { return Foo<U>::bar() + Foo<V>::bar(); }
};
Если вы не хотите полностью специализировать класс, используйте вспомогательную структуру
template<class T>
struct aux {
static int bar();
};
template <>int aux <int>::bar() { return 4; }
template <>int aux <double>::bar() { return 8; }
template <typename U, typename V>
struct aux <std::pair<U, V> > {
static int bar() { return Foo<U>::bar() + Foo<V>::bar(); }
};
template<class T>
class Foo : aux<T> {
// ...
};
Это совершенно законно в C ++, это частичная специализация шаблона.
Удалите шаблон <>
и, если он еще не существует, добавьте явную специализацию шаблона класса, и он должен компилироваться на VS2005 (но не в VC6)
// explicit class template specialization
template <typename U, typename V>
class Foo<std::pair<U, V> >
{
public:
static int bar();
};
template <typename U, typename V>
int Foo<std::pair<U, V> >::bar() { return Foo<U>::bar() + Foo<V>::bar(); }