Skip to content

Instantly share code, notes, and snippets.

@sunmeat
Last active October 25, 2025 12:27
Show Gist options
  • Save sunmeat/b3fab7810397d7b5b150a4b132e1c6b9 to your computer and use it in GitHub Desktop.
Save sunmeat/b3fab7810397d7b5b150a4b132e1c6b9 to your computer and use it in GitHub Desktop.
технічні відмінності
// 1. універсальні шаблони мови C# не забезпечують такої ж гнучкості, як шаблони мови C++.
// наприклад, неможливо викликати арифметичні оператори в універсальному класі мови C#,
// хоча можна викликати оператори, визначені користувачем.
public class MyClass<T>
{
public T Add(T a, T b)
{
return (dynamic)a + (dynamic)b; // коли використовуються dynamic, компілятор відкладає перевірку типів до часу виконання.
// це дозволяє використовувати оператор + для будь-яких типів, які підтримують цей оператор, але також вимагає,
// щоб операнди справді підтримували оператор +, інакше станеться помилка часу виконання.
}
}
======================================================================================================================================
// 2. C# не дозволяє використовувати параметри шаблону, що не є типами:
template<int N>
void myFunction() {
std::cout << "Value of N in function: " << N << std::endl;
}
======================================================================================================================================
// 3. C# не підтримує явну спеціалізацію, тобто індивідуальну реалізацію шаблону для конкретного типу.
// загальний шаблон класу
template<typename T>
class MyClass {
public:
void display() {
std::cout << "Generic Template" << std::endl;
}
};
// явна спеціалізація для типу int
template<>
class MyClass<int> {
public:
void display() {
std::cout << "Specialized Template for int" << std::endl;
}
};
======================================================================================================================================
// 4. C# не підтримує часткову спеціалізацію: індивідуальну реалізацію для підмножини аргументів типу.
// загальний шаблон класу
template<typename T, typename U>
class MyClass {
...
// часткова спеціалізація, коли другий параметр є покажчиком
template<typename T, typename U>
class MyClass<T, U*> {
...
// часткова спеціалізація, коли перший параметр є покажчиком
template<typename T, typename U>
class MyClass<T*, U> {
...
======================================================================================================================================
// 5. C# не дозволяє використовувати параметр типу як базовий клас для універсального типу:
// базовий шаблонний клас
template<typename Base>
class Derived : public Base {
public:
...
======================================================================================================================================
// 6. C# не дозволяє параметрам типів мати типи за замовчуванням:
// шаблонний клас з типом за замовчуванням
template<typename T = int>
class MyClass {
public:
...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment