Вы можете решить проблему, добавив слой:
template <typename T>
struct Foo{
Foo(T elem);
T elem_;
T get(){
return do_get<T>();
}
private:
template <typename U = T>
auto do_get() -> std::enable_if_t<std::is_same<U, int>::value, U>;
template <typename U = T>
auto do_get() -> std::enable_if_t<std::is_same<U, bool>::value, U>;
};
//If definitions for the do_get functions are provided before these
//explicit template instantiation definitions, the compiler will certainly
//inline those definitions.
template class Foo<int>;
template class Foo<bool>;
Вы только пропустите доступ к более новой.NET 3,5 библиотеки и охладите синтаксис, такой как LINQ и лямбда-выражения. Производительность, мудрая, они выполнят то же.
Между прочим, ASP.NET MVC еще НЕ включен с.NET 3.5....
Я сказал бы, что самой большой вещью является Linq. По крайней мере, это для нас, поскольку мы полностью заменяем старый слой данных им! (Медленно, но конечно.)
Да, MVC то, что намного легче, чем Ваше старомодное приложение WebForm. Так LINQ к SQL.
Существует также другая платформа MVC, которая работает с .net2 (монорельсовая дорога, просетка...), таким образом, mvc не связан с версией платформы, это - просто шаблон.
Но, новые функции платформы, которые я использую и нахожу полезными:
LINQ, но не LINQ к SQL (который я действительно не люблю). LINQ к XML и LINQ к Объектам являются фантастическими.
LINQ, чувак. LINQ. Не пробивайте его, 'пока Вы не попробовали его. ORM является забавой снова!
Лямбда-выражения FTW! Дополнительные методы Linq для наборов, объединенных с лямбда-выражениями, являются потрясающими.
Никто еще не упомянул Дополнительные методы?!? См. http://weblogs.asp.net/scottgu/archive/2007/03/13/new-orcas-language-feature-extension-methods.aspx
И объекты выше (особенно LINQ, Лямбда-выражение, объект, набор и инициализаторы свойства, и т.д.).