我有以下代码段,它获取当前系统 IP 并将其存储在SERVER_IP变量中:
EXECUTE_PROCESS(
COMMAND ip route get 8.8.8.8
COMMAND awk "NR==1 {print $NF}"
OUTPUT_VARIABLE SERVER_IP
OUTPUT_STRIP_TRAILING_WHITESPACE
)
Run Code Online (Sandbox Code Playgroud)
我需要在CMakeLists.txt文件层次结构中的多个位置使用此 IP。重用此代码的最佳方法是什么?我的第一个想法是使其成为一个类似 的函数function(GetIP),但我不确定将该函数放在哪里以使其对所有 CMakeLists.txt 文件可见。
假设我有一个结构体,它有一个名称和一些与之关联的值:
struct Season {
std::string name;
// Mean temperature over the season
double meanTemperature;
// Days since the start of year when it's strongest
float strongestAt;
// Fraction of a year it applies to, compared to other seasons
float yearFraction;
}
Run Code Online (Sandbox Code Playgroud)
本课程描述了每年的一个季节。假设我有一个它们的集合,它填充了一整年:
// made up method that is supposed to find a season (I don't use it in real code)
int findIndex(const std::vector<Season>& in, std::function<bool(const Season&)>);
class SeasonCollection
{
public:
const Season* GetSeason(const std::string& name) const
{
const int index …Run Code Online (Sandbox Code Playgroud) 我正在 GJS 中开发 GTK 应用程序,并且喜欢在 Gnome Shell 扩展中重用部分 GTK 代码。但是,我没有找到将
Gtk.Widget图标添加到 Gnome Shell 面板菜单的方法。
我尝试使用GtkClutter.Actorfrom clutter-gtk,但该库似乎已经过时,并且在 Wayland 或 X11 Gnome Shell 中都不起作用,因为它需要 Clutter1.0但看到7已经加载。imports.gi.GtkClutter在扩展中导入时
,Gnome Shell 会产生以下错误:
Requiring GtkClutter, version none: Requiring namespace 'Clutter' version '1.0', but '7' is already loaded。
这里有一些代码来演示clutter-gtk如果直接通过 ; 运行它的话,它实际上是有效的gjs。可能是因为我可以在这里强制执行 GTK 3.0。
gtkclutter.js:
imports.gi.versions.Gtk = '3.0' // fails if set to 4.0
const { Gtk, GLib, Clutter, GtkClutter } = imports.gi
// …Run Code Online (Sandbox Code Playgroud) 在C++中,没有事实上的标准日志记录工具.根据我的经验,商店自己动手.但是,在尝试创建可重用的软件组件时,这会产生一些问题.如果系统中的所有内容都依赖于日志记录组件,这会使软件不再可重用,基本上迫使任何下游项目将您的日志记录框架与他们真正想要的组件一起使用.
IOC(依赖注入)并不能真正帮助解决问题,因为组件需要依赖于日志记录抽象.记录组件本身可以添加对文件I/O,触发机制和其他可能不需要的依赖项的依赖性.
向专有日志记录框架添加依赖项是否会牺牲组件的可重用性?
随着越来越多的项目,我发现我经常重复从项目到项目,从客户到客户的许多常见任务.所以我开始组装一个"实用程序"库,这些库是这些常见元素的集合,通常在项目之间重复.
到目前为止,我有实用程序来调整图像大小,导出数据网格excel,发送电子邮件,并替换标记化的消息.
如果您正在构建/使用.NET实用程序类库,那么您认为哪些类型的进程有用?你会想到什么命名空间/组?
更新
我说的是一个实际的类库,它被分成命名空间以组合公共元素.
想象一下,你为一家小型精益软件公司工作.您知道公司未来的竞争力在于拥有良好的可重用代码库.管理公司的再利用政策以确保您今天的交付,同时为未来提供支持,这将是非常重要的.
在我看来,在业务中编写可重用代码有两个原因; 1)在公司内共享以提高未来的速度和效率2)在网络上发布和其他人将有助于改进代码(从某种意义上说是众包).
开发人员应该始终运用常识来重复使用.但是为了从管理角度处理这个问题,我想要一些整体的代码重用指南,以确保我们现在和将来都具有竞争力.这些指南应鼓励开发人员询问"我的代码是否为重用候选人?".这些指导方针应该说什么?
我最初的想法:在最低级别编写可重用的代码是不值得的(例如,我有一些内联代码在字符串的末尾添加了一个"s"),这个代码的代码太多了.甚至筛选,发现有人已经做过了.在最顶层(即应用程序)编写可重用代码也是不值得的,因为您的客户报告应用程序最终会被通用化为SQL客户端 - 对大多数用户来说是无用的.
可重复使用代码的主要障碍:除非您知道它存在,否则不能重复使用它; 信任 - 它已经完成,但你相信吗?使代码通用/可重用(并记录)的初始时间.
我有一个用于记录异常的接口,即IExceptionLogger.
这个接口有3个实现:DBExceptionLogger,XMLExceptionLogger,CSVExceptionLogger.
我有一个可以使用的应用程序DBExceptionLogger.
该应用程序仅供参考IExceptionLogger.如何DBExceptionLogger在应用程序中创建实例.
我不能DBExceptionLogger直接引用它,因为它会破坏具有IExceptionLogger接口的目的.
我正在处理的项目在类中的每个方法中使用IDisposable对象.它已经开始在每个方法的开头重新输入使用块的繁琐乏味,并且想知道是否有一种方法来指定用于类的每个方法的一次性变量?
public static class ResourceItemRepository
{
public static ResourceItem GetById(int id)
{
using (var db = DataContextFactory.Create<TestDataContext>())
{
// Code goes here...
}
}
public static List<ResourceItem> GetInCateogry(int catId)
{
using (var db = DataContextFactory.Create<TestDataContext>())
{
// Code goes here...
}
}
public static ResourceItem.Type GetType(int id)
{
using (var db = DataContextFactory.Create<TestDataContext>())
{
// Code goes here...
}
}
}
Run Code Online (Sandbox Code Playgroud) 有没有办法在这些函数中重用迭代数组代码:
public static double[] ln(double[] z) {
// returns an array that consists of the natural logarithm of the values in array z
int count = 0;
for (double i : z){
z[count] = Math.log(i);
count += 1;
}
return z;
}
public static double[] inverse(double[] z) {
// returns an array that consists of the inverse of the values in array z
int count = 0;
for (double i : z){
z[count] = Math.pow(i,-1);
count += 1;
}
return …Run Code Online (Sandbox Code Playgroud) 我想知道如何在我的Android应用程序中访问int所有Activity类之间的相同变量.我的情况是我有一个代表一些点的变量,我把它放在它自己的类中,我希望每个Activity使用它的值都相同.
当用户获得一个点时,它会增加1,所以假设用户得到12分,我希望它在所有Activitys 中都是相同的.
code-reuse ×10
c# ×2
c++ ×2
java ×2
.net ×1
agile ×1
android ×1
c++11 ×1
cmake ×1
common-tasks ×1
constants ×1
function ×1
gjs ×1
gnome-shell ×1
gtk ×1
inheritance ×1
interface ×1
linux ×1
logging ×1
refactoring ×1
reusability ×1
static ×1
utilities ×1