feat: CPlusPlus Studio
This commit is contained in:
parent
07d3684eed
commit
fa8e6f3c8b
31
Studio/Studio.sln
Normal file
31
Studio/Studio.sln
Normal file
@ -0,0 +1,31 @@
|
||||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
# Visual Studio Version 16
|
||||
VisualStudioVersion = 16.0.32802.440
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Studio", "Studio\Studio.vcxproj", "{11117C51-BEAF-4F63-B386-CDB0760BCDE8}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|x64 = Debug|x64
|
||||
Debug|x86 = Debug|x86
|
||||
Release|x64 = Release|x64
|
||||
Release|x86 = Release|x86
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{11117C51-BEAF-4F63-B386-CDB0760BCDE8}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{11117C51-BEAF-4F63-B386-CDB0760BCDE8}.Debug|x64.Build.0 = Debug|x64
|
||||
{11117C51-BEAF-4F63-B386-CDB0760BCDE8}.Debug|x86.ActiveCfg = Debug|Win32
|
||||
{11117C51-BEAF-4F63-B386-CDB0760BCDE8}.Debug|x86.Build.0 = Debug|Win32
|
||||
{11117C51-BEAF-4F63-B386-CDB0760BCDE8}.Release|x64.ActiveCfg = Release|x64
|
||||
{11117C51-BEAF-4F63-B386-CDB0760BCDE8}.Release|x64.Build.0 = Release|x64
|
||||
{11117C51-BEAF-4F63-B386-CDB0760BCDE8}.Release|x86.ActiveCfg = Release|Win32
|
||||
{11117C51-BEAF-4F63-B386-CDB0760BCDE8}.Release|x86.Build.0 = Release|Win32
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
EndGlobalSection
|
||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
||||
SolutionGuid = {BBED567D-5B88-44EF-BE70-53896DD79856}
|
||||
EndGlobalSection
|
||||
EndGlobal
|
37
Studio/Studio/MemoryAlignment.h
Normal file
37
Studio/Studio/MemoryAlignment.h
Normal file
@ -0,0 +1,37 @@
|
||||
/*******************************************************************
|
||||
* Copyright (c) 2022~2023 XMuli All rights reserved.
|
||||
* GitHub: https://github.com/XMuli
|
||||
* Description: ÀàÖÐ×Ö½Ú¶ÔÆëÅжÏ
|
||||
******************************************************************/
|
||||
|
||||
// NOTE:
|
||||
#pragma once
|
||||
class A
|
||||
{
|
||||
private:
|
||||
int m_a;
|
||||
char m_c1;
|
||||
char m_c2;
|
||||
|
||||
static int g_sta;
|
||||
}; // 8
|
||||
|
||||
class B
|
||||
{
|
||||
public:
|
||||
void fun() {};
|
||||
|
||||
private:
|
||||
char m_c1;
|
||||
int m_a;
|
||||
char m_c2;
|
||||
}; // 12
|
||||
|
||||
class C
|
||||
{
|
||||
public:
|
||||
virtual void fun() {};
|
||||
|
||||
private:
|
||||
int m_a;
|
||||
}; // 8
|
1
Studio/Studio/SharedPtr.cpp
Normal file
1
Studio/Studio/SharedPtr.cpp
Normal file
@ -0,0 +1 @@
|
||||
#include "SharedPtr.h"
|
117
Studio/Studio/SharedPtr.h
Normal file
117
Studio/Studio/SharedPtr.h
Normal file
@ -0,0 +1,117 @@
|
||||
/*******************************************************************
|
||||
* Copyright (c) 2022~2023 XMuli All rights reserved.
|
||||
* GitHub: https://github.com/XMuli
|
||||
* Description: C++ 实现一个核心的 shared_ptr 智能指针模板类;实现了引用计数是线程安全的,但访问管理的资源不是线程安全的。
|
||||
* Note: 书写测试时,若使用默认构造函数, 成员变量 _ptr、_refCount、_pMutex 在 release() 中容易崩溃;推荐带参的构造函数,无错
|
||||
* Ref: https://juejin.cn/post/7111726931301072910#heading-8
|
||||
* https://cloud.tencent.com/developer/article/1688444
|
||||
* https://blog.csdn.net/Z_Stand/article/details/98512756
|
||||
******************************************************************/
|
||||
|
||||
#pragma once
|
||||
#include <iostream>
|
||||
#include <mutex>
|
||||
using namespace std;
|
||||
|
||||
template <typename T>
|
||||
class SharedPtr
|
||||
{
|
||||
public:
|
||||
SharedPtr() : _ptr(nullptr), _refCount(nullptr), _pMutex(nullptr) { cout << "default constructor" << endl; };
|
||||
SharedPtr(T* obj) : _ptr(obj), _refCount(new int(1)), _pMutex(new mutex) { cout << "no default constructor" << endl; };
|
||||
|
||||
SharedPtr(const SharedPtr<T>& obj) // 其 _refCount 可以通过另外一个指针来修改,指向的是同一个地址
|
||||
: _ptr(obj._ptr)
|
||||
, _refCount(obj._refCount)
|
||||
, _pMutex(obj._pMutex)
|
||||
{
|
||||
cout << "copy constructor" << endl;
|
||||
addRefCount();
|
||||
};
|
||||
|
||||
SharedPtr<T>& operator=(const SharedPtr<T>& obj)
|
||||
{
|
||||
cout << "copy assignment constructor" << endl;
|
||||
if (&obj != this) {
|
||||
if (_ptr != obj._ptr) {
|
||||
release(); // 先释放旧的资源
|
||||
|
||||
_ptr = obj._ptr;
|
||||
_refCount = obj._refCount;
|
||||
_pMutex = obj._pMutex;
|
||||
|
||||
addRefCount(); // 再技计数 +1
|
||||
}
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
//SharedPtr(SharedPtr<T>&& obj) noexcept;
|
||||
//SharedPtr<T>& operator=(SharedPtr<T>&& obj)noexcept;
|
||||
|
||||
~SharedPtr() { cout << "destructor" << endl; release(); }
|
||||
T& operator*() { return *_ptr; }
|
||||
T* operator->() { return _ptr; }
|
||||
|
||||
int useCount() { return *_refCount; }
|
||||
T* get() { return _ptr; }
|
||||
|
||||
private:
|
||||
void addRefCount()
|
||||
{
|
||||
cout << "addRefCount" << endl;
|
||||
_pMutex->lock();
|
||||
++*_refCount;
|
||||
_pMutex->unlock();
|
||||
}
|
||||
|
||||
void release()
|
||||
{
|
||||
cout << "release" << endl;
|
||||
bool bDelMutex = false;
|
||||
_pMutex->lock();
|
||||
|
||||
if (_ptr && --*_refCount == 0) { // 先校验是否存在,及计数为 0 才释放
|
||||
delete _ptr;
|
||||
delete _refCount;
|
||||
_ptr = nullptr;
|
||||
_refCount = nullptr;
|
||||
|
||||
bDelMutex = true;
|
||||
}
|
||||
|
||||
_pMutex->unlock();
|
||||
if (bDelMutex)
|
||||
delete _pMutex;
|
||||
}
|
||||
|
||||
private: // 需在构造函数中初始化
|
||||
T* _ptr;
|
||||
int* _refCount;
|
||||
mutex* _pMutex; // 计数自增非原子操作,加锁解决多线程
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
SharedPtr<int> sp1(new int(10));
|
||||
SharedPtr<int> sp2(sp1);
|
||||
*sp2 = 20;
|
||||
//sp1 与 sp2 在管理这部分资源,引用计数为 2
|
||||
cout << sp1.useCount() << " *ptr:" << *sp1 << endl; //2 20
|
||||
cout << sp2.useCount() << " *ptr:" << *sp2 << endl; //2 20
|
||||
|
||||
SharedPtr<int> sp3(new int(30));
|
||||
sp2 = sp3; //sp3 赋值给它,释放管理的旧资源,引用计数-1,
|
||||
cout << sp1.useCount() << " *ptr:" << *sp1 << endl; //1 20
|
||||
cout << sp2.useCount() << " *ptr:" << *sp2 << endl; //2 30
|
||||
cout << sp3.useCount() << " *ptr:" << *sp3 << endl; //2 30
|
||||
|
||||
sp1 = sp3;
|
||||
cout << sp1.useCount() << " *ptr:" << *sp1 << endl; //3 30
|
||||
cout << sp2.useCount() << " *ptr:" << *sp2 << endl; //3 30
|
||||
cout << sp3.useCount() << " *ptr:" << *sp3 << endl; //3 30
|
||||
|
||||
std::cout << "Hello World!\n";
|
||||
return 0;
|
||||
}
|
108
Studio/Studio/SpecialMembers.h
Normal file
108
Studio/Studio/SpecialMembers.h
Normal file
@ -0,0 +1,108 @@
|
||||
/*******************************************************************
|
||||
* Copyright (c) 2022~2023 XMuli All rights reserved.
|
||||
* GitHub: https://github.com/XMuli
|
||||
* Description: C++ 类的特殊五个函数
|
||||
* Ref:https://en.cppreference.com/w/cpp/language/rule_of_three https://en.wikipedia.org/wiki/Special_member_functions
|
||||
******************************************************************/
|
||||
|
||||
#pragma once
|
||||
#include <iostream>
|
||||
#include <utility>
|
||||
using namespace std;
|
||||
|
||||
class A
|
||||
{
|
||||
public:
|
||||
A() : m_ptr(nullptr) {
|
||||
std::cout << "default constructor" << endl;
|
||||
}
|
||||
|
||||
A(const char* s) : m_ptr(nullptr) {
|
||||
std::cout << "no-default-val constructor" << endl;
|
||||
if (s) {
|
||||
auto n = std::strlen(s) + 1;
|
||||
m_ptr = new char[n];
|
||||
std::memcpy(m_ptr, s, n);
|
||||
}
|
||||
}
|
||||
|
||||
A(const A& other)
|
||||
: m_ptr(nullptr) {
|
||||
std::cout << "copy constructor" << endl;
|
||||
if (other.m_ptr) {
|
||||
auto n = std::strlen(other.m_ptr) + 1;
|
||||
m_ptr = new char[n];
|
||||
std::memcpy(m_ptr, other.m_ptr, n);
|
||||
}
|
||||
}
|
||||
|
||||
A& operator = (const A& other) {
|
||||
std::cout << "copy assignment constructor" << endl;
|
||||
if (this != &other) {
|
||||
delete[] m_ptr; // Free the existing resource.
|
||||
|
||||
if (other.m_ptr != nullptr) {
|
||||
auto n = std::strlen(other.m_ptr) + 1;
|
||||
m_ptr = new char[n];
|
||||
std::memcpy(m_ptr, other.m_ptr, n);
|
||||
}
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
A(A&& other) noexcept // 行参无 const
|
||||
: m_ptr(nullptr) {
|
||||
std::cout << "move constructor" << endl;
|
||||
if (other.m_ptr)
|
||||
m_ptr = std::move(other.m_ptr);
|
||||
|
||||
other.m_ptr = nullptr;
|
||||
}
|
||||
|
||||
A& operator=(A&& other) noexcept { // 行参无 const
|
||||
std::cout << "move assignment constructor" << endl;
|
||||
if (this != &other) {
|
||||
delete[] m_ptr; // Free the existing resource.
|
||||
|
||||
if (other.m_ptr)
|
||||
m_ptr = std::move(other.m_ptr);
|
||||
|
||||
other.m_ptr = nullptr;
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
~A() {
|
||||
std::cout << "destructor" << endl;
|
||||
if (m_ptr)
|
||||
delete[] m_ptr;
|
||||
}
|
||||
|
||||
private:
|
||||
char* m_ptr;
|
||||
};
|
||||
|
||||
A fn() {
|
||||
A t("A fun()");
|
||||
return t;
|
||||
}
|
||||
|
||||
//int main()
|
||||
//{
|
||||
// A a1("a1"); // default constructor
|
||||
// A a2(a1); // copy constructor
|
||||
// A a3 = a1; // copy constructor
|
||||
// a1 = a3; // copy assignment constructor
|
||||
//
|
||||
// std::cout << "----------------------------\n\n";
|
||||
//
|
||||
// //fn(); // function returning a A object
|
||||
// A a5 = std::move(a1); // move constructor
|
||||
// A a6; // default constructor
|
||||
// a6 = std::move(a1); // move assignment constructor
|
||||
// std::cout << "Hello World!\n";
|
||||
//
|
||||
// return 0;
|
||||
//}
|
20
Studio/Studio/Studio.cpp
Normal file
20
Studio/Studio/Studio.cpp
Normal file
@ -0,0 +1,20 @@
|
||||
// Studio.cpp : This file contains the 'main' function. Program execution begins and ends there.
|
||||
//
|
||||
|
||||
#include <iostream>
|
||||
|
||||
//int main()
|
||||
//{
|
||||
// std::cout << "Hello World!\n";
|
||||
//}
|
||||
|
||||
// Run program: Ctrl + F5 or Debug > Start Without Debugging menu
|
||||
// Debug program: F5 or Debug > Start Debugging menu
|
||||
|
||||
// Tips for Getting Started:
|
||||
// 1. Use the Solution Explorer window to add/manage files
|
||||
// 2. Use the Team Explorer window to connect to source control
|
||||
// 3. Use the Output window to see build output and other messages
|
||||
// 4. Use the Error List window to view errors
|
||||
// 5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
|
||||
// 6. In the future, to open this project again, go to File > Open > Project and select the .sln file
|
153
Studio/Studio/Studio.vcxproj
Normal file
153
Studio/Studio/Studio.vcxproj
Normal file
@ -0,0 +1,153 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|Win32">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>Win32</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Debug|x64">
|
||||
<Configuration>Debug</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
<ProjectConfiguration Include="Release|x64">
|
||||
<Configuration>Release</Configuration>
|
||||
<Platform>x64</Platform>
|
||||
</ProjectConfiguration>
|
||||
</ItemGroup>
|
||||
<PropertyGroup Label="Globals">
|
||||
<VCProjectVersion>16.0</VCProjectVersion>
|
||||
<Keyword>Win32Proj</Keyword>
|
||||
<ProjectGuid>{11117c51-beaf-4f63-b386-cdb0760bcde8}</ProjectGuid>
|
||||
<RootNamespace>Studio</RootNamespace>
|
||||
<WindowsTargetPlatformVersion>10.0</WindowsTargetPlatformVersion>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>true</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
|
||||
<ConfigurationType>Application</ConfigurationType>
|
||||
<UseDebugLibraries>false</UseDebugLibraries>
|
||||
<PlatformToolset>v142</PlatformToolset>
|
||||
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||
<CharacterSet>Unicode</CharacterSet>
|
||||
</PropertyGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
|
||||
<ImportGroup Label="ExtensionSettings">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="Shared">
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<ClCompile>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||
<SDLCheck>true</SDLCheck>
|
||||
<PreprocessorDefinitions>NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<ConformanceMode>true</ConformanceMode>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||
<OptimizeReferences>true</OptimizeReferences>
|
||||
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||
</Link>
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="SharedPtr.cpp" />
|
||||
<ClCompile Include="Studio.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="MemoryAlignment.h" />
|
||||
<ClInclude Include="SharedPtr.h" />
|
||||
<ClInclude Include="SpecialMembers.h" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
</ImportGroup>
|
||||
</Project>
|
36
Studio/Studio/Studio.vcxproj.filters
Normal file
36
Studio/Studio/Studio.vcxproj.filters
Normal file
@ -0,0 +1,36 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<Filter Include="Source Files">
|
||||
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
|
||||
<Extensions>cpp;c;cc;cxx;c++;cppm;ixx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Header Files">
|
||||
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
|
||||
<Extensions>h;hh;hpp;hxx;h++;hm;inl;inc;ipp;xsd</Extensions>
|
||||
</Filter>
|
||||
<Filter Include="Resource Files">
|
||||
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
|
||||
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="Studio.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="SharedPtr.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="MemoryAlignment.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="SpecialMembers.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="SharedPtr.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
Loading…
Reference in New Issue
Block a user