#include <iostream>
#include <functional>
template<class T>
struct is_function {
constexpr static bool value = false;
};
template<class T>
struct is_function<std::function<T>> {
constexpr static bool value = true;
};
template<class T>
constexpr static bool is_function_v = is_function<T>::value;
template<class T>
void check(T t) {
if constexpr (is_function_v<T>) {
std::cout << "is std::function" << std::endl;
}
else {
std::cout << "is not std::function" << std::endl;
}
}
void f2() {}
int main() {
std::function f1 = [](){};
std::function f3 = f2;
check(f1); // is std::function
check(f2); // is not std::function
check(f3); // is std::function
return 0;
}
#ifndef FILE_H
#define FILE_H
#include "file1.h"
#include <iostream> например этот заголовочный файл объявлен и в file1.h
#endif // !FILE_H
#if TYPE_64
using type = uint64_t;
#elseif defined(TYPE_32)
using type = uint32_t;
#elseif defined(TYPE_16)
using type = uint16_t;
#else
using type = uint8_t;
#endif
trash operator + (const trash & other)
{
trash temp;
temp.x = this->x + other.x;
temp.y = this->y + other.y;
cout << "x = " << temp.x << "\ty = " << temp.y << endl;
return temp;
}
trash operator + (const trash & other)
{
return trash(x + other.x, y + other.y);
}
#include <iostream>
#include <functional>
void f(const std::string& str) {
std::cout << str;
}
void foo(void (*f)(const std::string&), const std::string& str) {
f(str);
}
void Foo(std::function<void(const std::string&)> F, const std::string& str) {
F(str);
}
int main() {
foo(f, "Hello");
Foo(f, " world");
return 0;
}
foo
пример без использования STLFoo
пример с использованием STLstd::initializer_list
, но таким образом и все функции тоже нужно переделать чтобы они принимали этот тип. #include <fstream>
#include <vector>
bool read_file(std::string name_file, std::vector<std::string> &arr) {
// Открываю текстовый файл для чтения
std::ifstream read;
read.open(name_file);
// Проверяю открылся ли текстовый файл.
// Если не открылся, то выхожу из функции с возвратом значения ЛОЖЬ
if (!read.is_open()) {
read.close();
return false;
}
// Читаю текстовый файл до конца
while (!read.eof()) {
// Получаю текстовое значение одной строки в текстовом файле
std::string str;
getline(read, str);
// Добавляю полученое текстовое значение в конец вектора
arr.push_back(str);
}
read.close();
// Выход из функции с возвратом значения ИСТИНА
return true;
}
#include <iostream>
#include <vector>
int main() {
// Вектор в который будем записывать значения тектового файла
std::vector<std::string> arr;
// Проверяем получилось ли прочесть текстовый файл
// Если не получилось выполняем какой-нибудь код
if (!read_file("C:\\Text.txt", arr)) {
std::cout << "Fail read file" << std::endl;
}
return 0;
}